Java – button click causes the application to crash

I just set up an onclick method, which is written in the activity class and will be called as soon as I click the button Even before it enters the method, the application crashes

Error message when clicking the floating operation button;

java.lang.IllegalArgumentException: Expected receiver of type com.example.bob.vexteamqueuing.AdminControl,but got android.support.v7.view.ContextThemeWrapper java.lang.IllegalArgumentException:
Expected receiver of type com.example.bob.vexteamqueuing.AdminControl,but got android.support.v7.view.ContextThemeWrapper

at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)   
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Active XML code:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/NoActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_admin_control" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_input_add"
    android:onClick="createNewTournament"
    android:clickable="true" />

Admincontrol activity java code:

public class AdminControl extends AppCompatActivity {

        Firebase ref;
        public static List <Tournament> tournaments;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_admin_control);
            Toolbar b = (Toolbar) findViewById(R.id.toolbar);
            b.setTitle("Tournaments");
            setSupportActionBar(b);
            ref = AdminLogin.firebase.child("users").child(AdminLogin.firebase.getAuth().getUid());
            if (tournaments == null){
                tournaments = new ArrayList<>();
            }        
        }

        public void createNewTournament(View v) {
            Intent newIntent = new Intent(this,TournamentCreator.class);
            startActivity(newIntent);
        }  
  }

In create – tournament Creator

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tournament_creator);
    /*b = (FloatingActionButton) findViewById(R.id.fab);
    b.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            beginTournament(v);
        }
    });*/
}

Manifest file – may not be necessary, just provide

<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET" />

<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".AdminLogin"
        android:label="@string/title_activity_admin_login"
        android:parentActivityName=".Initial">
        <Meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.bob.vexteamqueuing.Initial" />
    </activity>
    <activity android:name=".TournamentCreator" />
    <activity
        android:name=".AdminControl"
        android:label="@string/title_activity_admin_control"
        android:parentActivityName=".Initial"
        android:theme="@style/NoActionBar">
        <Meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.bob.vexteamqueuing.Initial" />
    </activity>
</application>

Solution

Your problem should be solved by removing your Android: onclick = "createnewtourname" event from your layout

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_input_add"   
    android:clickable="true" />

And in your oncreate for r.id Fab adds a listener, like this

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin_control);
    Toolbar b = (Toolbar) findViewById(R.id.toolbar);
    b.setTitle("Tournaments");
    setSupportActionBar(b);
    ref = AdminLogin.firebase.child("users").child(AdminLogin.firebase.getAuth().getUid());
    if (tournaments == null){
        tournaments = new ArrayList<>();
    }

    FloatingActionButton myFab = (FloatingActionButton)findViewById(R.id.fab); 
    myFab.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
            createNewTournament(v); 
        } 
    });
}

The same problem occurs in EditText onclick exception and is fixed with listener

Hope this can help!!

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>