Android - onclick не смог найти метод

У меня возникла проблема, когда onclick не может найти метод, который он должен исключить. Android пытается вызвать метод onClick public void fahrplan(View v,Connection conn) но не может его найти. Детали моего кода ниже, и ошибка после этого. Пожалуйста, помогите мне определить, почему Android не может найти метод onClick. Благодарю.

Прямо сейчас есть только одно действие, поэтому другой код не выполняется.

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)

Было бы очень хорошо, если бы вы могли мне помочь.

1 ответ

Решение

Подпись farhplan неверна. Так должно быть

 public void fahrplan (View v){

и не

 public void fahrplan (View v, Connection conn) {

метод разрешается во время выполнения с использованием отражения. Подпись должна совпадать

Другие вопросы по тегам