Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 应用程序崩溃并出现“java.lang.NullPointerException”错误_Android_Firebase - Fatal编程技术网

Android 应用程序崩溃并出现“java.lang.NullPointerException”错误

Android 应用程序崩溃并出现“java.lang.NullPointerException”错误,android,firebase,Android,Firebase,我已经在stackoverflow中看到了许多问题,但没有一个能够解决我的问题。这是我的代码。代码中没有错误,但应用程序在运行时崩溃,在Logcat中出现此错误-尝试在空对象引用上调用虚拟方法“android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.GetBitBitmap” public void SaveImageInFirebase(){ FirebaseStorage storage = Fireb

我已经在stackoverflow中看到了许多问题,但没有一个能够解决我的问题。这是我的代码。代码中没有错误,但应用程序在运行时崩溃,在Logcat中出现此错误-尝试在空对象引用上调用虚拟方法“android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.GetBitBitmap”

public void SaveImageInFirebase(){
        FirebaseStorage storage = FirebaseStorage.getInstance();
        StorageReference storageRef = storage.getReferenceFromUrl("gs://opiniondonkey-9c20e.appspot.com");
        SimpleDateFormat df = new SimpleDateFormat("ddMMyyHHmmss");
        Date dataobj = new Date();
        String imagePath = df.format(dataobj) + ".jpg";
        StorageReference ImageRef = storageRef.child("images/" + imagePath);

        mPic.setDrawingCacheEnabled(true);
        mPic.buildDrawingCache();
        Drawable drawable = mPic.getDrawable();
        //TODO:: error in below line.
        Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos);
        byte[] data = baos.toByteArray();
        UploadTask uploadTask = ImageRef.putBytes(data);
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(getApplicationContext(),"Welcome To Opinion Donkey",Toast.LENGTH_LONG).show();
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Task<Uri> downloadUrl = taskSnapshot.getStorage().getDownloadUrl();
                myRef.child("Users").child(name).child("ProfileUrl").setValue(downloadUrl);
            }
        });

    }
我希望当有人再次登录时,google id图片不应覆盖我的用户图片。

可能是mPic.getDrawable;正在返回null。因此drawable为null,您通过BitmapDrawabledrawable.getBitmap访问它

这可能是因为毕加索在ImageView async中加载图像,而您正试图在加载/下载图像之前访问该图像

因此,mPic.getDrawable返回null

在访问ifdrawable之前添加检查!=那里是空的


此外,只有在毕加索完成加载后才需要调用此函数。所以你们可以在那个里添加监听器,只有在图像加载完成后才能访问它。

代码太多,错误堆栈跟踪不够…现在编辑。我想我知道答案。位图文件中有错误,所以我可能应该尝试添加try-catch,然后在调试后看到错误?是的,由于异步性质,这可能是错误,但我通过try-and-catch块发现了错误。