Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android firebase数据库java.lang.String java.lang.Object.toString();关于空对象引用_Java_Android_Firebase_Android Studio_Firebase Realtime Database - Fatal编程技术网

android firebase数据库java.lang.String java.lang.Object.toString();关于空对象引用

android firebase数据库java.lang.String java.lang.Object.toString();关于空对象引用,java,android,firebase,android-studio,firebase-realtime-database,Java,Android,Firebase,Android Studio,Firebase Realtime Database,请在此提供帮助(求职面试前) 我试图上传一个图像,当它开始上传时,它崩溃了 并删除两个基本子对象(图像、拇指图像) E/AndroidRuntime:致命异常:主 进程:com.example.pc.newchatj,PID:9350 java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.Object.toString()” 在com.example.pc.newchatj.SettingsActivit

请在此提供帮助(求职面试前)

我试图上传一个图像,当它开始上传时,它崩溃了 并删除两个基本子对象(图像、拇指图像)

E/AndroidRuntime:致命异常:主 进程:com.example.pc.newchatj,PID:9350 java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.Object.toString()” 在com.example.pc.newchatj.SettingsActivity$1.onDataChange(SettingsActivity.java:103) 位于com.google.firebase.database.core.ValueEventRegistration.firevent(com.google.firebase:firebase数据库@@16.0.4:75) 位于com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase数据库@@16.0.4:63) 位于com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase数据库@@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) 位于android.app.ActivityThread.main(ActivityThread.java:5254) 位于java.lang.reflect.Method.invoke(本机方法) 位于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数据库中,它删除了两个孩子(图片,拇指图片)

有人请帮忙吗

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) {

        }
    });
我已经为这两种图像添加了StorageReference(图像、拇指图像)

filepath.putFile(resultUri).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
UploadTask UploadTask=thumb\u filepath.putBytes(thumb\u字节);
uploadTask.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务thumb\u任务){
if(thumb_task.issusccessful()){
//获取常规图像下载url
filepath.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
下载_urll=uri.toString();
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Toast.makeText(SettingsActivity.this,“常规失败”,Toast.LENGTH_SHORT.show();
}
});
//获取缩略图下载url
thumb_filepath.getDownloadUrl().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共无效(Uri thumb\u Uri){
thumb_downloadUrl=thumb_uri.toString();
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Toast.makeText(SettingsActivity.this,“thumb失败”,Toast.LENGTH_SHORT.show();
}
});
Map update_hashMap=new hashMap();
更新\u hashMap.put(“图像”,下载\u urll);
更新\u hashMap.put(“thumb\u图像”,thumb\u下载URL);
mUserDatabase.updateChildren(update_hashMap).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
avi_settings.smoothToHide();
avi_设置。设置可见性(视图。不可见);
Toast.makeText(SettingsActivity.this,“已成功上载”,Toast.LENGTH_SHORT.show();
}
}
});
}
}
});
Toast.makeText(SettingsActivity.this,“working”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(SettingsActivity.this,“上传文件时出错”,Toast.LENGTH_SHORT.show();
avi_settings.smoothToHide();
avi_设置。设置可见性(视图。不可见);
}
}
});

在尝试从
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()
方法,而不是将其强制转换为字符串。您将不再获得任何
NullPointerException

当您编写NullPointerException时,NullPointerException会直线上升

String name = dataSnapshot.child("name").getValue().toString();
错误消息表示您试图在空对象上调用
.toString()
。 您应该保存
String name=dataSnapshot.child(“name”).getValue()
的结果,并在调用
.tostring()
方法之前检查其是否为null

我知道这是
String name = dataSnapshot.child("name").getValue().toString();
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());