我正在构建一个简单的消息应用,目前我想查看其文本旁边的用户图像 我试图从firebase数据库中获取用户图像 但是,每当我尝试使用某个图像的getValue()时,应用程序就会崩溃 如果我选择用图像链接替换imageURI,那么我看到它适用于该链接。
08-27 23:14:02.392 4817-4817/com.myproj.blogapp E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.myproj.blogapp.MessageAdapter$1.onDataChange(MessageAdapter.java:79)
at com.google.android.gms.internal.to.zza(Unknown Source)
at com.google.android.gms.internal.vj.zzHX(Unknown Source)
at com.google.android.gms.internal.vp.run(Unknown Source)
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:5938)
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:1400)
@Override
public void onBindViewHolder(final MessageViewHolder viewHolder, final int index) {
final Message c = messagesList.get(index);
final String sender = c.getFrom();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(sender);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
imageUrl = dataSnapshot.child("image").getValue().toString(); //error on this line
viewHolder.setUserimage(context,imageUrl);
String name = dataSnapshot.child("name").getValue().toString();
viewHolder.displayName.setText(name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
viewHolder.messageText.setText(c.getMessage());
viewHolder.time.setText(EpochtimeToDateAndTimeString(c.getTime()));
}
答案 0 :(得分:0)
您的数据不完整。看看锈用户。它没有图像......
您必须在getChild(String path)
之后使用正确的空值检查,然后再将其划分为
或者在获取之前使用hasChild(String path)
如果值为null或子项不存在,您可能需要考虑使用默认图像
注意:你可以在孩子身上使用getValue(String.class)
而不是toString
,或者在整个初始快照上使用POJO而不是抓住个别孩子
您还需要实施onCancelled
,以便查看Firebase错误