【问题标题】:App crashes when uploading data to firebase as the app crashes when upload button is clicked将数据上传到 Firebase 时应用程序崩溃,因为单击上传按钮时应用程序崩溃
【发布时间】:2017-06-04 14:24:06
【问题描述】:

我不断收到下面的错误

Process: com.attendanceapp.obare.attendanceapp, PID: 8494
                  java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.contains(java.lang.CharSequence)' on a null object reference
                      at android.content.ContentResolver.checkLeakDetectIgnoreList(ContentResolver.java:2695)
                      at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1178)
                      at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:958)
                      at android.content.ContentResolver.openInputStream(ContentResolver.java:678)
                      at com.google.firebase.storage.UploadTask.<init>(Unknown Source)
                      at com.google.firebase.storage.StorageReference.putFile(Unknown Source)
                      at com.Healthcareapp.medicalapp.AddEmployeePackage.Add_employee$4.onClick(Add_employee.java:142)
                      at android.view.View.performClick(View.java:5274)
                      at android.view.View$PerformClick.run(View.java:21543)
                      at android.os.Handler.handleCallback(Handler.java:815)
                      at android.os.Handler.dispatchMessage(Handler.java:104)
                      at android.os.Looper.loop(Looper.java:207)
                      at android.app.ActivityThread.main(ActivityThread.java:5728)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

代码如下,addOnSuccessListener出错。任何帮助将不胜感激。不过一切都很好。

最终 StorageReference onlineStoragePhotoRef = mStorageReference.child("WorkForce_Photos").child(FirstName).child(photoUri.getLastPathSegment());

            progressBar.setMessage("Uploading file to Firebase");
            progressBar.show();

            final String finalFirstNameText = FirstName;
            final String finalLastNameText = LastName;
            final String finalIDnumText = IDnum;
            final String finalContactText = Contactnum;
            final String finaWorkBadgeText = WBadge;

            onlineStoragePhotoRef.putFile(photoUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    progressBar.setMessage("Success");
                    photoUrl = taskSnapshot.getDownloadUrl().toString();
                    WorkForceData workForceData = new WorkForceData(finalFirstNameText, finalLastNameText, finalIDnumText, finalContactText, finaWorkBadgeText,photoUrl);
                    mDatabaseReference.child("WorkForce").push().setValue(workForceData);
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(Add_employee.this, e.getMessage(), Toast.LENGTH_LONG).show();
                    photoUrl = "";
                    WorkForceData workForceData = new WorkForceData(finalFirstNameText, finalLastNameText, finalIDnumText, finalContactText, finaWorkBadgeText, photoUrl);
                    mDatabaseReference.child("Users").push().setValue(workForceData);
                }
            });

            progressBar.dismiss();
            finish();

        }
    });

}

【问题讨论】:

  • Add_employee.java 的第 142 行是什么?
  • 就在addonsuccesslistener的正上方
  • 手机的制造商和型号是什么?小米 MIUI 设备也报告了类似的堆栈跟踪。
  • 你碰巧用的是DTAC电话吗?

标签: android firebase firebase-storage


【解决方案1】:

上传完成后,成功监听器异步执行。这发生在您关闭进度条并使用以下语句完成活动之后:

progressBar.dismiss();
finish();

重构您的代码以在上传完成时执行这些操作:

onlineStoragePhotoRef.putFile(photoUri)
        .addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
        if (task.isSuccessful()) {
            progressBar.setMessage("Success");
            photoUrl = task.getResult().getDownloadUrl().toString();
            WorkForceData workForceData = new WorkForceData(finalFirstNameText, finalLastNameText, finalIDnumText, finalContactText, finaWorkBadgeText,photoUrl);
            mDatabaseReference.child("WorkForce").push().setValue(workForceData);
        } else {
            Toast.makeText(Add_employee.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
            photoUrl = "";
            WorkForceData workForceData = new WorkForceData(finalFirstNameText, finalLastNameText, finalIDnumText, finalContactText, finaWorkBadgeText, photoUrl);
            mDatabaseReference.child("Users").push().setValue(workForceData);
        }
        progressBar.dismiss();
        finish();
    }
});

【讨论】:

  • 相同的堆栈跟踪?
  • 是的,即使在重新编码整个类和 xml 之后也会出现同样的错误
  • 嗯,这在另一部手机上工作,感谢您的帮助。不知道为什么它对我的不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多