简体   繁体   English

带有额外内容的 Intent 的可空问题

[英]Nullable problem with Intents with extras

I am learning how to develop for Android (and development in general).我正在学习如何为 Android 开发(以及一般开发)。 I am trying to create a Quiz App, so I can learn the basics.我正在尝试创建一个测验应用程序,这样我就可以学习基础知识。 While trying to use an Intent to go to another class with an extra variable on it, I found this problem (which I think is pretty usual): My app crashes when I go to the next Activity.在尝试使用 Intent 到 go 到另一个带有额外变量的 class 时,我发现了这个问题(我认为这很常见):当我 go 到下一个 Activity 时,我的应用程序崩溃了。

This is the code in the activity that gets the username ("usuario and nomeUsuario"):这是活动中获取用户名的代码(“usuario and nomeUsuario”):

package com.isa56.quiz2;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;

public class HomeActivity extends AppCompatActivity {

    public EditText usuario;
    public EditText senha;
    public Button botaoLogin;
    public String nomeUsuario;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        botaoLogin = findViewById(R.id.botaoLogin);
        senha = findViewById(R.id.senha);
        usuario = findViewById(R.id.usuario);
        nomeUsuario = usuario.getText().toString();
        Log.d("nome de usuario", nomeUsuario);

        botaoLogin.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent i = new Intent(HomeActivity.this, FirstQuestionActivity.class);
                i.putExtra("nome", nomeUsuario);
                startActivity(i);
            }});
    }
}

And this is the code on the SecondQuestionActivity:这是 SecondQuestionActivity 上的代码:

package com.isa56.quiz2;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class FirstQuestionActivity extends AppCompatActivity {

    public Button prox1;
    public Button respUm1;
    public Button respUm2;
    public TextView texto1;
    public int pontuacao = 0;
    Intent i = getIntent();
    String nome = i.getStringExtra("nome");

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_firstquestion);

        prox1 = findViewById(R.id.prox1);
        respUm1 = findViewById(R.id.botao1a);
        respUm2 = findViewById(R.id.botao1b);
        texto1 = findViewById(R.id.texto1);

        respUm1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                texto1.setText("Resposta errada!");
                respUm1.setEnabled(false);
                respUm2.setEnabled(false);
                prox1.setEnabled(true);
            }});
        respUm2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                texto1.setText("Resposta certa!");
                respUm2.setEnabled(false);
                respUm1.setEnabled(false);
                pontuacao += 1;
                prox1.setEnabled(true);
            }});
        prox1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent i = new Intent(FirstQuestionActivity.this, SecondQuestionActivity.class);
                i.putExtra("pontos", pontuacao);
                i.putExtra("nome", nome);
                startActivity(i);
            }
        });
    }
}

What is wrong with it?它有什么问题? How can I prevent it?我该如何预防?

Thank you!谢谢!

PS: I am not used to forum or development in general, so I might have done this wrongly. PS:我一般不习惯论坛或开发,所以我可能做错了。 I'm sorry.对不起。

Edit: Also, if anyone wanna take a look at the whole project, it's here .编辑:另外,如果有人想看一下整个项目,就在这里

Edit2: This is the Logcat output: Edit2:这是 Logcat output:

2020-11-13 21:05:18.531 7517-7517/com.isa56.quiz2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.isa56.quiz2, PID: 7517
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.isa56.quiz2/com.isa56.quiz2.FirstQuestionActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3365)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
        at com.isa56.quiz2.FirstQuestionActivity.<init>(FirstQuestionActivity.java:18)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

Keep these lines inside onCreate() method.将这些行保留在 onCreate() 方法中。

Intent i = getIntent(); 
String nome = i.getStringExtra("nome");

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

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