• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps Uploading image to Firebase: Null pointer Exception(bitmap.compress)

Forgivee

Newbie
Since firebase documentation is not for begginers, sometimes it can be hard and complex for beginners.

I want to upload image to storage of firebase. I read their documentation and tried but it gives NullPointerException.

I think this null pointer exception is about imageview. There is a abc.jpg image in the drawable folder.

There is no maintains.jpg file on the firebase side. Should there be maintains.jpg file on the firebase? I couldn't also understand here

Activity_main.xml:

Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="gc.imageuploader.MainActivity">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/abc"/>

</LinearLayout>

Main Activity:

Code:
public class MainActivity extends AppCompatActivity {

   private static final String TAG = MainActivity.class.getSimpleName();


    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseStorage storage = FirebaseStorage.getInstance();

        // Create a storage reference from our app
        StorageReference storageRef = storage.getReferenceFromUrl("(Mybucketnamehere)");

        StorageReference mountainsRef = storageRef.child("mountains.jpg");

        imageView = (ImageView)findViewById(R.id.imageView);




        imageView.setDrawingCacheEnabled(true);
        imageView.buildDrawingCache();
        Bitmap bitmap = imageView.getDrawingCache();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//Error line
        byte[] data = baos.toByteArray();

        UploadTask uploadTask = mountainsRef.putBytes(data);
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle unsuccessful uploads
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                Uri downloadUrl = taskSnapshot.getDownloadUrl();
            }
        });
}
Finally, How to solve?
 
11-05 20:48:20.022 24139-24139/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: gc.imageuploader, PID: 24139
java.lang.RuntimeException: Unable to start activity ComponentInfo{gc.imageuploader/gc.imageuploader.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at gc.imageuploader.MainActivity.onCreate(MainActivity.java:64)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
 
No, at line 64 this code exists.

Code:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Sorry, I stated as 65. line in the first post.

Code:
 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//Error line

No true this one,

It should be
Code:
ByteArrayOutputStream baos = new ByteArrayOutputStream();//Error line
 
Did you try running your app in debug mode, setting a breakpoint in your code, and stepping through line by line. This would help you understand what is null, and where/why it's going wrong.
 
Back
Top Bottom