来自firebase数据库崩溃的imageURI

时间:2017-08-27 22:15:54

标签: java android firebase nullpointerexception

我正在构建一个简单的消息应用,目前我想查看其文本旁边的用户图像 我试图从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()));
}

Database Image

1 个答案:

答案 0 :(得分:0)

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

您必须在getChild(String path)之后使用正确的空值检查,然后再将其划分为

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

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

注意:你可以在孩子身上使用getValue(String.class)而不是toString,或者在整个初始快照上使用POJO而不是抓住个别孩子

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