来自 firebase 数据库崩溃的图像 URI



我正在构建一个简单的消息应用程序,目前我想在用户的文本旁边查看用户图像。
我正在尝试从火力数据库获取用户图像。
但是,每当我尝试获取图像的值((时,应用程序都会崩溃。
如果我选择用图像链接替换 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()));
}

数据库映像

您的数据不完整。看看生锈的用户。它没有图像...

您必须在getChild(String path)后使用适当的空检查,然后才能将其字符串化

或者在获得之前使用hasChild(String path)

如果值为 null 或子项不存在,则可能需要考虑使用默认图像

注意:您可以在子快照上使用getValue(String.class)而不是使用toString,或者在整个初始快照上使用POJO而不是获取单个子快照

您还需要实现onCancelled以便查看 Firebase 错误

最新更新