当前位置: 首页 > 知识库问答 >
问题:

Android-findViewById在尝试从Serializable设置值时返回null

程墨竹
2023-03-14

我不知道如何传递这个用户类对象。我只是尝试从第一个活动中存储的editText中获取输入,然后将其发送到另一个活动中的textView。我以前做过这件事,但出于某种原因,我在这里错了,我一直收到这样的错误“java.lang.RuntimeException:无法启动活动组件信息{example.com.avatar/example.com.avatar.DisplayActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”。有人能帮我吗?

//1st Activity
findViewById(R.id.buttonSubmit).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, DisplayActivity.class);
                User user = new User();
                textViewNameLocal = findViewById(R.id.textViewName);
                intent.putExtra("USER", user);
                startActivity(intent);
            }
        });
    }

//2nd Activity
public class DisplayActivity extends AppCompatActivity {
    TextView textViewName, textViewEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        textViewName = findViewById(R.id.textViewName); //this was the error, it needs to be below the "setContentView(R.layout.activity_display)".
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display);
        Intent intent = getIntent();
        User user = (User) intent.getSerializableExtra("USER");
        textViewName.setText(user.getName().toString);

    }
}

共有2个答案

朱鹏
2023-03-14

使用Serializable实现您的类。让我们假设这是您的实体类:

import java.io.Serializable;

@SuppressWarnings("serial") //With this annotation we are going to hide compiler warnings
public class User implements Serializable {

    public User(double id, String name) {
        this.id = id;
        this.name = name;
    }

    public double getId() {
        return id;
    }

    public void setId(double id) {
        this.id = id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private double id;
    private String name;
}

我们正在将名为user的对象从X活动发送到Y活动。X活动中的某处;

User obj = new User(4,"Yuvi");
Intent i = new Intent(this, Y.class);
i.putExtra("sampleObject", obj);
startActivity(i);

在Y活动中,我们得到对象。

Intent i = getIntent();
User obj = (User)i.getSerializableExtra("sampleObject");

就是这样。

阴永逸
2023-03-14

代码中的序列化没有问题。

您在以下位置收到错误:

textViewName.setText(user.getName());

因为变量textViewName为空。

仅在调用方法setContentView之后,才考虑使用findViewById为其分配引用

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
textViewName = findViewById(R.id.textViewName); //call after setContentView

Intent intent = getIntent();
User user = (User) intent.getSerializableExtra("USER");
textViewName.setText(user.getName());
 类似资料:
  • 我是Android开发的新手,当然还有碎片。 我想访问main activity中我的片段的控件,但是'find viewbyid'返回null。如果没有片断,代码可以正常工作。

  • 我有一个返回< code>List的方法。现在我想知道如何正确放置< code>try/catch块。如果我将< code>return语句放在< code>try中,我会得到错误 并非所有代码路径都返回值 如果我放置在之后(就像我目前所做的那样),即使在之后,它也会返回。那么最好的方法应该是什么? 方法如下:

  • 当我试图使用Facebook或Google登录Firebase时,我的应用程序崩溃了,因为它没有使用CreateNewUser()为Firebase创建新用户。 Logcat:- 05-10 09:11:58.180 16986-16986/com.example.sefi.authenticationprojectE/VideoAdapter: onCreateViewHolder() 登录ct

  • 我一直在这里跟随这个教程: Android Studio-导入外部库/JAR

  • 我在Java中有一个与MySQL连接的多类项目,我可以与这个SQL数据库建立连接,但当我试图将它读入数组时,它得到的是废话,而不是所请求的信息。我做错了什么? 它在sql定义下面出现了一条弯曲的线条,说它们从来没有被读取过,但我就是不明白为什么会这样!它构建得很好,可以看到数据库中有行,但它返回以下内容: 显示“java2assignment3.dvd@5e0010bc”和“java2assign

  • 数字根是数字中所有数字的递归和。给定n,取n的位数之和。如果该值有两位数,则继续以这种方式递减,直到生成一个位数。这只适用于自然数。 正如您在上面看到的,我已经尝试通过测试“如果输出的值不等于1,则返回”的if fe语句返回个位数。但是,这个返回不起作用,而是从我放在下面以清除返回错误的返回中返回0。对这个问题有什么帮助吗?谢谢