getIntent().getExtras() 上的 Nullpointer;

Nullpointer on getIntent().getExtras();

提问人:aignerbas 提问时间:10/28/2019 最后编辑:Md. Asaduzzamanaignerbas 更新时间:10/28/2019 访问量:1350

问:

RegisterActivity1 中的代码:

Bundle extras = new Bundle();

...

case R.id.continue_button:

extras.putString("email",eMail_eingabe.getText().toString().trim());
extras.putString("pw1", passwort_1_eingabe.getText().toString().trim());
extras.putString("pw2", passwort_2_eingabe.getText().toString().trim());
i.putExtras(extras);
this.startActivity(i);

break;

RegisterActivity2 中的代码:


Bundle extras = getIntent().getExtras(); //Nullpointer oocurs here

semail = extras.getString("email");
spw1 = extras.getString("pw1");
spw2 = extras.getString("pw2");

我正在尝试将电子邮件和密码从活动 1 传递到活动 2,但到目前为止,我尝试过的任何方法似乎都不起作用。我总是在这里得到一个 Nullpointer 异常:

Bundle extras = getIntent().getExtras();

关于如何解决这个问题的任何提示?

这是 Activity1 的完整方法,以防它与 override 方法有关......

@Override
public void onClick(View view) {

    String email = eMail_eingabe.getText().toString().trim();
    String password = passwort_1_eingabe.getText().toString().trim();


    if (eMail_eingabe.getText().toString().isEmpty()) {
        //eMail_eingabe.setError("Bitte email eingeben");
        eMail_eingabe.setText("Bitte email eingeben");
        eMail_eingabe.requestFocus();
        return;
    }


    if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        eMail_eingabe.setError("Bitte eine gültige E-Mail eingeben");
        eMail_eingabe.requestFocus();
        return;
    }


    if (password.length() < 6) {
        passwort_1_eingabe.setError("Bitte mindestens 6 Zeichen eingeben");
        passwort_1_eingabe.requestFocus();
        return;
    } else if (passwort_1_eingabe.getText().toString().isEmpty()) {
        passwort_1_eingabe.setError("Bitte passwort eingeben");
        passwort_1_eingabe.requestFocus();
        return;
    } else if (passwort_2_eingabe.getText().toString().isEmpty()) {
        passwort_2_eingabe.setError("Bitte passwort eingeben");
        passwort_2_eingabe.requestFocus();
        return;
    }

    if (!passwort_1_eingabe.getText().toString().equalsIgnoreCase(passwort_2_eingabe.getText().toString())) {
        passwort_2_eingabe.setError("Passwort stimmt nicht überein");
        passwort_2_eingabe.requestFocus();
        return;
    }


    switch (view.getId()) {

        case R.id.continue_button:

            extras.putString("email", eMail_eingabe.getText().toString().trim());
            extras.putString("pw1", passwort_1_eingabe.getText().toString().trim());
            extras.putString("pw2", passwort_2_eingabe.getText().toString().trim());
            i.putExtras(extras);
            this.startActivity(i);

            break;


    }
}

例外:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.hoimi, PID: 7812
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.hoimi/com.example.hoimi.student.Register2_Student_Activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3355)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
        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:2199)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
        at com.example.hoimi.student.Register2_Student_Activity.<init>(Register2_Student_Activity.java:22)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1224)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3340)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86) 
        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:2199) 
        at android.os.Handler.dispatchMessage(Handler.java:112) 
        at android.os.Looper.loop(Looper.java:216) 
        at android.app.ActivityThread.main(ActivityThread.java:7625) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 
Android-intent nullPointerException qtandroidextras

评论

0赞 OneCricketeer 10/28/2019
请显示完整的堆栈跟踪
1赞 Md. Asaduzzaman 10/28/2019
在何处初始化意图?
0赞 Cyrus the Great 10/28/2019
意图参考(i)在哪里?我是怎么宣布的?
0赞 aignerbas 10/28/2019
意图 i;在 onCreate 方法和 i = new Intent(this, Register2_Student_Activity.class);onCreate 方法内部
0赞 Mahdi-Malv 10/28/2019
你在哪里尝试使用.错误表示这是 null。在它不应该是 nullgetIntent()onCreate

答:

0赞 Ehsan msz 10/28/2019 #1

调用 时,它将返回您在上一个 Activity 中创建的 intent。getIntent()

public Intent getIntent ()

返回启动此活动的意向。

活动文档

所以在第二个活动中,你的意图是null

在启动您的意图onCreate

评论

2赞 Mahdi-Malv 10/28/2019
这是一个很好的观点。我想知道为什么它被否决了 2 次。
3赞 aignerbas 10/28/2019 #2
Bundle extras = getIntent().getExtras();

必须在 onCreate 方法中调用,我之前调用过它,所以它不起作用。

有人给出了正确的答案,但后来删除了他的帖子(因为他得到了 2 张反对票??

无论如何,非常感谢。

评论

3赞 Ehsan msz 10/28/2019
我很高兴我能够提供帮助。
1赞 Raghu Mudem 10/28/2019 #3

问题不在于它因为。使用 null 检查 getIntent() 并进一步使用。getExtras()getIntent()

你的代码应该是这样的

if(getIntent() != null) {
Bundle extras = getIntent().getExtras(); //Nullpointer oocurs here
semail = extras.getString("email");
spw1 = extras.getString("pw1");
spw2 = extras.getString("pw2");
}

祝你好运。

评论

0赞 user16118981 11/24/2023
只是一个快速说明,在某些情况下,专门检查似乎会有所帮助,否则仅检查会导致 NullPointer 异常getIntent().getExtras() != nullgetIntent() != null