1

Trying to upload an image file to FireBase Storage and Firebase Database, then retrieve uploaded files later. However, I'm receiving a NullPointerException and I can't understand the reasoning behind it. Any advice would be great!

The error message received:

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)

Below is the uploadFile() method in the MainActivity.java :

    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();
        }
    }

Upload Class:

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;
    }
}

2 Answers2

2

It is clear from error message Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference, you are using trim() on null string. mName is not initialized yet and you are using trim() on it. Maybe you want this

    public Upload(String name, String imageUrl) { //name parameter must not be null
    if (name.trim().equals("")) {
        name = "No Name";
    }

    mName = name;
    mImageUrl = imageUrl;
}
Amit Tiwary
  • 787
  • 1
  • 8
  • 16
0

Youre using the .trim() on this line but it points to a null object IE here equals("")

  public Upload(String name, String imageUrl) {
            if (mName.trim().equals("")) {
                name = "No Name";

remove the trim()

Ruben Meiring
  • 333
  • 2
  • 21