首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FireBase上传和检索图像- NullPointerException

FireBase上传和检索图像- NullPointerException
EN

Stack Overflow用户
提问于 2019-10-16 06:57:48
回答 2查看 184关注 0票数 1

尝试将图像文件上载到FireBase存储和Firebase数据库,然后再检索上传的文件。然而,我收到了一个NullPointerException,我无法理解它背后的原因。任何建议都是很好的!

收到的错误消息:

代码语言:javascript
复制
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
        at com.example.studyshotsv4.Upload.<init>(Upload.java:13)
        at com.example.studyshotsv4.MainActivity$6.onSuccess(MainActivity.java:161)
        at com.example.studyshotsv4.MainActivity$6.onSuccess(MainActivity.java:148)
        at com.google.firebase.storage.StorageTask.lambda$new$0(com.google.firebase:firebase-storage@@16.0.4:125)
        at com.google.firebase.storage.StorageTask$$Lambda$1.raise(Unknown Source:6)
        at com.google.firebase.storage.TaskListenerImpl.lambda$onInternalStateChanged$2(com.google.firebase:firebase-storage@@16.0.4:94)
        at com.google.firebase.storage.TaskListenerImpl$$Lambda$3.run(Unknown Source:6)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6986)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

下面是uploadFile()方法在MainActivity.java中的应用:

代码语言:javascript
复制
    private void uploadFile()  {
        if (mImageUri != null) {
            StorageReference fileReference = mStorageRef.child(System.currentTimeMillis()
                    + "." + getFileExtension(mImageUri)); //Unique file name

            mUploadTask = fileReference.putFile(mImageUri)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)  {
                            Handler handler = new Handler();
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    mProgressBar.setProgress(0);
                                }
                            }, 500);

                            Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_LONG).show();
                            Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),

                                    taskSnapshot.getUploadSessionUri().toString()); // taskSnapshot.getStorage().getDownloadUrl().toString());
                            String uploadId = mDatabaseRef.push().getKey();
                            mDatabaseRef.child(uploadId).setValue(upload);
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                            mProgressBar.setProgress((int) progress);
                        }
                    });
        } else {
            Toast.makeText(this, "No file selected", Toast.LENGTH_SHORT).show();
        }
    }

上传类:

代码语言:javascript
复制
public class Upload {
    private String mName;
    private String mImageUrl;

    public Upload() {
        //empty constructor needed
    }

    //Constructor takes name and imageURL
    public Upload(String name, String imageUrl) {
        if (mName.trim().equals("")) {
            name = "No Name";
        }

        mName = name;
        mImageUrl = imageUrl;
    }

    //Get and set methods
    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getImageUrl() {
        return mImageUrl;
    }

    public void setImageUrl(String imageUrl) {
        mImageUrl = imageUrl;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-10-16 07:00:42

从错误消息中可以清楚地看到,尝试在空对象引用上调用虚拟方法'java.lang.String java.lang.String.trim()‘,您正在对空字符串使用trim()。mName尚未初始化,您正在对其使用trim()。也许你想要这个

代码语言:javascript
复制
    public Upload(String name, String imageUrl) { //name parameter must not be null
    if (name.trim().equals("")) {
        name = "No Name";
    }

    mName = name;
    mImageUrl = imageUrl;
}
票数 2
EN

Stack Overflow用户

发布于 2019-10-16 07:03:18

您在这一行上使用了.trim(),但它指向一个空对象IE (此处为equals("") )

代码语言:javascript
复制
  public Upload(String name, String imageUrl) {
            if (mName.trim().equals("")) {
                name = "No Name";

拆下纵梁()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58407441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档