簡體   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