-2

onclick が実行するはずのメソッドを見つけられないという問題があります。Android は onClick メソッドを呼び出そうとしますが、public void fahrplan(View v,Connection conn) それを見つけることができません。私のコードの詳細は以下の通りで、エラーはその後にあります。Android が onClick メソッドを見つけられない理由を特定するのを手伝ってください。ありがとう。

現在、アクティビティは 1 つしかないため、他のコードは実行されていません。

MainActivity.java

    package eu.rathenau.fahrgemeinschaft;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;

    public class MainActivity extends AppCompatActivity {



        String x;
        TextView testTextView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
             testTextView =(TextView)findViewById(R.id.textView);
            connect();
        }

        public  Connection connect() {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection conn = DriverManager.getConnection("jdbc:mysql://"ip-address"/MarcelGerber?user="username"&password="password");
                return conn;
            } catch (Exception e) {
                return null;
            }
        }

        public  String getAllKürzel(Connection conn) {
            if (conn == null) {
                return null;
            }
            Statement st = null;
            ResultSet rs = null;
            try {
                st = conn.createStatement();
                rs = st.executeQuery("SELECT Kürzel FROM Benutzer");
                int length = 0;
                if (rs.last()) {
                    length = rs.getRow();
                    rs.beforeFirst();
                }
                String[] kürzel = new String[length];
                while(rs.next()) {
                    kürzel[rs.getRow() - 1] = rs.getString("Kürzel");
                }

                x=kürzel[1];
                return x;
            } catch (Exception e) {
                return null;
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (Exception e) {
                    }
                }
                if (st != null) {
                    try {
                        st.close();
                    } catch (Exception e) {
                    }
                }
            }



        }

        public void fahrplan (View v,Connection conn){

            testTextView.setText(getAllKürzel(conn));
        }


    }

activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="eu.rathenau.fahrgemeinschaft.MainActivity">


        <Button
            android:layout_width="match_parent"
            android:layout_height="70dp"
            android:text="@string/fahrplan"
            android:id="@+id/buttonFahrplan"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:onClick="fahrplan"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="70dp"
            android:text="hallo"
            android:id="@+id/textView"
            android:layout_below="@+id/buttonFahrplan"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="66dp" />
    </RelativeLayout>

AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="eu.rathenau.fahrgemeinschaft">

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity"
                android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>

ログ

    04-22 11:20:39.830 28066-28066/eu.rathenau.fahrgemeinschaft E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                  Process: eu.rathenau.fahrgemeinschaft, PID: 28066
                                                                                  java.lang.IllegalStateException: Could not find method fahrplan(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'buttonFahrplan'
                                                                                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:321)
                                                                                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:280)
                                                                                      at android.view.View.performClick(View.java:4856)
                                                                                      at android.view.View$PerformClick.run(View.java:19956)
                                                                                      at android.os.Handler.handleCallback(Handler.java:739)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                      at android.os.Looper.loop(Looper.java:211)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5373)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

あなたが私を助けることができれば、本当によかったです。

4

1 に答える 1

1

farhplan の署名が間違っています。そのはず

 public void fahrplan (View v){

ではない

 public void fahrplan (View v, Connection conn) {

メソッドはリフレクションを使用して実行時に解決されます。署名は一致する必要があります

于 2016-04-22T11:19:25.000 に答える