我是这里的新手,这是android中的firebase用法。我正在使用android studio,这是错误日志。
Process: dioobanu.yahoo.locchatting, PID: 32156
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at dioobanu.yahoo.locchatting.MainActivity$1.onDataChange(MainActivity.java:57)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.5:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.5:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.5:55)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:7007)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
我认为第一个错误可能在我的MainActivity中:
reference.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
username.setText(user.getUsername());
if (user.getImageURL().equals("default")) {
profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
Glide.with(MainActivity.this).load(user.getImageURL()).into(profile_image);
}
}
第57行中的User user = dataSnapshot.getValue(User.class);
出错了
有什么建议吗?
这是我在firebase中的数据结构。
答案 0 :(得分:0)
谢谢大家的关注..非常感谢..我将尝试您的所有建议..我不能解释太多..其余的源代码都在此vid中:
https://www.youtube.com/watch?v=LyAmpfm4ndo&index=3&list=PLzLFqCABnRQftQQETzoVMuteXzNiXmnj8
我想从聊天应用程序中的那个vid学习自动登录的代码,但似乎每个人都在这个vid中遇到了同样的错误。这是MainActivity:
公共类MainActivity扩展了AppCompatActivity {
CircleImageView profile_image;
TextView username;
FirebaseUser firebaseUser;
DatabaseReference reference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("");
profile_image = findViewById(R.id.profile_image);
username = findViewById(R.id.username);
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
username.setText(user.getUsername());
if (user.getImageURL().equals("default")) {
profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
Glide.with(MainActivity.this).load(user.getImageURL()).into(profile_image);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.logout:
FirebaseAuth.getInstance().signOut();
startActivity(new Intent( MainActivity.this, StartActivity.class));
finish();
return true;
}
return false;
}
}
这是User.class:
公共类用户{
private String id;
private String username;
private String imageURL;
public User(String id, String username, String imageURL){
this.id = id;
this.username = username;
this.imageURL = imageURL;
}
public User(){
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getImageURL() {
return imageURL;
}
public void setImageURL(String imageURL) {
this.imageURL = imageURL;
}
}
我认为我在MainActivity中的问题中提到的行中缺少某些内容...
用户user = dataSnapshot.getValue(User.class);
我是android程序的新手..太多的东西让我不明白其含义..如果我对答案b'cuz不对,我感到很抱歉。我是这个stackoverflow中的新手。
答案 1 :(得分:0)
由于您已经在数据库结构的Uid节点上,因此您不必加载模型来填充数据。
尝试一下:
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//User user = dataSnapshot.getValue(User.class);
String username = dataSnapshot.child("username").getValue().toString();
String imageUrl = dataSnapshot.child("imageURL").getValue().toString();
username.setText(username);
if (imageUrl.equals("default")) {
profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
Glide.with(MainActivity.this).load(imageUrl).into(profile_image);
}
}