Нулевой указатель на getIntent (). GetExtras (); - PullRequest
0 голосов
/ 28 октября 2019

код в 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
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) 

Ответы [ 3 ]

1 голос
/ 28 октября 2019
Bundle extras = getIntent().getExtras();

нужно было вызывать в методе onCreate, я вызывал его раньше, чтобы он не работал.

Кто-то дал правильный ответ, но позже удалил свой пост (потому что он получил 2 отрицательных голоса? ?)

В любом случае, большое спасибо.

1 голос
/ 28 октября 2019

Проблема не из-за getExtras(), а из-за getIntent(). Проверьте ваш getIntent () с нулем и используйте дальше.

Ваш код должен выглядеть примерно так:

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

Удачи.

0 голосов
/ 28 октября 2019

когда вы вызываете getIntent(), он возвращает намерение, созданное вами в предыдущем действии.

public Intent getIntent ()

Возвращает намерение, которое начало это действие.

Документация по деятельности

поэтому во втором упражнении ваше намерение null

в onCreate инициируйте ваше намерение

...