java - 尝试在空对象引用上调用虚拟方法“void com.basicprofileapp.dataholder.setUsername(java.lang.String)”
问题描述
我正在创建一个基本应用程序,它接受输入并将其存储在具有自动递增功能的 firebase 数据库中,但每次给出空指针异常时它都会崩溃。
我认为我的数据持有者 java 文件中有一些问题,但我无法修复它。
我已经尝试更改 dataholder 文件中的参数。我已经检查了我的 android 清单文件中的 firebase 服务。
这是我的数据持有者 java 文件
public class dataholder {
String username,password1;
public dataholder(String username, String password1) {
this.username = username;
this.password1 = password1;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword1() {
return password1;
}
public void setPassword1(String password1) {
this.password1 = password1;
}
}
和 MainActivity
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class MainActivity extends AppCompatActivity {
EditText name;
EditText password;
Button login;
DatabaseReference reff;
dataholder obj;
long maxid = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (EditText) findViewById(R.id.etusername);
password = (EditText) findViewById(R.id.etpassword);
login = (Button) findViewById(R.id.Login);
reff = FirebaseDatabase.getInstance().getReference().child("dataholder");
reff.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
maxid = (dataSnapshot.getChildrenCount());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
obj.setUsername(name.getText().toString().trim());
obj.setPassword1(password.getText().toString().trim());
reff.child(String.valueOf(maxid + 1)).setValue("obj");
Toast.makeText(getApplicationContext(), "Data inserted ", Toast.LENGTH_SHORT).show();
}
});
}
}
解决方案
您的字段从未设置,因此当您在调用的“登录”dataholder obj
中访问它时它为空。OnClickListener
Button
您需要先分配obj
一个实际值,然后才能访问 getter/setter,例如obj = new dataholder(...)
.
推荐阅读
- python-3.x - 如何用 Python 处理纹理集问题,我无法创建精灵
- r - Keras 模型属于错误类别 (R)
- php - 如何获取没有和带有特殊(抛光)字符的所有记录
- r - 如何在创建 Txt 输出时将列标题拆分为两行
- ansible - 如何在 Ansible Play 期间修复 Broken pipe 错误
- javascript - 数组解析并转换为具有特定输出的新数组列表
- python - 返回随机值
- arrays - 如何使用 Google 表格中查询功能的 select 语句从单元格中获取文本?
- node.js - 对 Google Cloud NodeJs API 的首次请求比后续请求花费更多时间
- laravel - 模型没有查询结果,Laravel