Java 来自firebase数据库的imageURI崩溃
我正在构建一个简单的消息应用程序,目前我想查看用户文本旁边的图像。Java 来自firebase数据库的imageURI崩溃,java,android,firebase,nullpointerexception,Java,Android,Firebase,Nullpointerexception,我正在构建一个简单的消息应用程序,目前我想查看用户文本旁边的图像。 我正在尝试从firebase数据库获取用户图像。 然而,每当我试图获取图像的value()时,应用程序就会崩溃。 如果我选择用一个图像链接替换imageURI,那么我发现它可以与该链接一起工作 08-27 23:14:02.392 4817-4817/com.myproj.blogapp E/UncaughtException: java.lang.NullPointerException: Attempt to invoke
我正在尝试从firebase数据库获取用户图像。
然而,每当我试图获取图像的value()时,应用程序就会崩溃。
如果我选择用一个图像链接替换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)
您的数据不完整。看看生锈的用户。它没有图像 您必须在
getChild(字符串路径)
之后使用适当的空检查,然后才能对其进行字符串化
或者在获取之前使用hasChild(字符串路径)
在值为NULL或子不存在的情况下,您可能需要考虑默认图像
注意:您可以对子项使用getValue(String.class)
,而不是使用toString
,或者对整个初始快照使用POJO,而不是获取单个子项
您还需要实现
onCancelled
,这样您就可以看到您的Firebase错误错误清楚地表明您正在MessageAdapter.java行79中获取NPE。请在您读取数据库的位置显示数据库的内容。我已经添加了数据库的图像。在您的数据中,用户名为“rust”没有图像字段。@algrid啊,谢谢!但出于某种原因,我没有得到链接的图像。相反,当出现错误时,我会得到一个图像。
@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()));
}