繁体   English   中英

startActivity 发送到错误的活动:Android

[英]startActivity sending to wrong activity: Android

我试图让它在我的“概述”按钮被点击后,下一个按钮“变量”被启用。 该按钮启用,但是我的“变量”的 setOnClickListener 将我发送到我的 OverviewActivity,而不是我的 VariablesActivity。 我已经坚持了一段时间。

变量活动只是一个多项选择屏幕,但我只是在设置它。

我对 Java 和 Android Studio 真的很陌生,所以这很快就会令人困惑

代码:

public class HomeActivity extends AppCompatActivity {

public Button signOutBtn;
public Button overviewBtn;
public Button varBtn;
FirebaseAuth auth;
boolean overviewDone;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    signOutBtn = findViewById(R.id.signOutBtn);
    overviewBtn = findViewById(R.id.overviewBtn);
    varBtn = findViewById(R.id.varBtn);
    auth = FirebaseAuth.getInstance();

    overviewDone = false;

    signOutBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            auth.signOut();
            startActivity(new Intent(HomeActivity.this, SignInActivity.class));
            finish();
        }
    });

    overviewBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent overviewBtnIntent = new Intent(HomeActivity.this, OverviewActivity.class);
            startActivity(overviewBtnIntent);
        }
    });

    if (getIntent().hasExtra("state")) {
        if (getIntent().getStringExtra("state").equals("enable")) {
            overviewDone = true;
            varBtn.setEnabled(true);
        } else {
            varBtn.setEnabled(false);
        }
    } else {
        varBtn.setEnabled(false);
    }

    varBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent varbiesButtonIntent = new Intent(HomeActivity.this, VariablesActivity.class);
            startActivity(varbiesButtonIntent);
            Log.i("Variable Button", "Going to Variable Activity");
        }
    });
}

}

public class OverviewActivity extends AppCompatActivity {

public Button backBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_overview);

    backBtn = findViewById(R.id.ov_backButton);

    backBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(OverviewActivity.this, HomeActivity.class);
            intent.putExtra("state", "enable");
            startActivity(intent);
        }
    });
}

}

public class VariablesActivity extends AppCompatActivity {

public RadioGroup radioGroup;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_variables);

    radioGroup = (RadioGroup)findViewById(R.id.RadioGroup);

    // getting value of radio button checked
    final String value = ((RadioButton)findViewById(radioGroup.getCheckedRadioButtonId())).getText().toString();


    if(radioGroup.getCheckedRadioButtonId() == -1){
        // no radio buttons checked
    } else{
        // one the radio buttons are checked
        Log.i("Radio Button Clicked", value);
    }
}

}

堆栈跟踪:

2021-11-22 21:45:23.550 4535-4535/com.example.codehorizonapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.codehorizonapplication, PID: 4535
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.codehorizonapplication/com.example.codehorizonapplication.VariablesActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.RadioButton.getText()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.RadioButton.getText()' on a null object reference
    at com.example.codehorizonapplication.VariablesActivity.onCreate(VariablesActivity.java:24)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6669) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
int checkedId = radioGroup.getCheckedRadioButtonId();
String value = "";
if(checkedId != 1){
   value = ((RadioButton)findViewById(checkedId)).getText().toString();
}

如果没有检查任何内容, radioGroup.getCheckedRadioButtonId()返回 -1,-1 不是有效的 Id,因此findViewById返回 null。

null.getText()java.lang.NullPointerException

这是在没有选择任何内容的假设下,并且调用radioGroup.getCheckedRadioButtonId()仅在您调用getText()时不会崩溃的事实是否崩溃意味着您的radioGroup = (RadioGroup)findViewById(R.id.RadioGroup); 是正确的。

而创建OverviewActivity的原因是由于异常导致VariablesActivity过早结束导致的堆栈问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM