猿问

android firebase 数据库 java.lang.String java.lang

请在这里帮忙(面试前)


我正在尝试上传图像,当它开始上传时,它会崩溃并删除两个基本的孩子(图像,拇指图像)


E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.pc.newchatj, PID: 9350 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a com.example.pc.newchatj.SettingsActivity$1.onDataChange(SettingsActivity.java:103) 处的空对象引用 com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0 .4:75) 在 com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63) 在 com.google.firebase.database.core。 view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler. java:95) 在 android.os。Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke( Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)


在我的 Firebase 数据库中,它删除了两个孩子的 (image , thumb_image)


任何人请帮忙


mUserDatabase.addValueEventListener(new ValueEventListener() {

        @Override

        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


            String name = dataSnapshot.child("name").getValue().toString();

            String image = dataSnapshot.child("image").getValue().toString();

            String status = dataSnapshot.child("status").getValue().toString();

            String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();


            mName.setText(name);

            mStatus.setText(status);


            if (!image.equals("default")) {

                Picasso.get().load(image).placeholder(R.drawable.default_avatar).into(mDisplayImage);

            }

        }


        @Override

        public void onCancelled(@NonNull DatabaseError databaseError) {


        }

    });


富国沪深
浏览 145回答 3
3回答

慕码人8056858

正如你写的 NullPointerException 上升String name = dataSnapshot.child("name").getValue().toString();错误消息说您尝试.toString()在空对象上调用。您应该String name = dataSnapshot.child("name").getValue()在调用.toSring()方法之前保存结果并检查它是否为空。

智慧大石

在尝试从dataSnapshot对象获取数据之前,您应该检查该数据是否确实存在:mUserDatabase.addValueEventListener(new ValueEventListener() {    @Override    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {        if (dataSnapshot.exists()) { //Check for existens            String name = dataSnapshot.child("name").getValue(String.class);            String image = dataSnapshot.child("image").getValue(String.class);            String status = dataSnapshot.child("status").getValue(String.class);            String thumb_image = dataSnapshot.child("thumb_image").getValue(String.class);            mName.setText(name);            mStatus.setText(status);            if (!image.equals("default")) {                Picasso.get().load(image).placeholder(R.drawable.default_avatar).into(mDisplayImage);            }           }    }    @Override    public void onCancelled(@NonNull DatabaseError databaseError) {        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!    }});也最好传递String.class给将getValue()其转换为 String 的方法。你不会再得到任何东西NullPointerException了。

吃鸡游戏

用它store.setUrl((String) snapshot1.child("url").getValue());store.setName((String) snapshot1.child("name").getValue());代替store.setUrl(snapshot1.child("url").getValue().toString());store.setName(snapshot1.child("name").getValue().toString());
随时随地看视频慕课网APP

相关分类

Java
我要回答