有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

firebase存储中的java在保存照片之前,我需要发送两次照片

(抱歉我的英语)(抱歉,如果这个问题与编程无关,我是新手)所以我正在制作一个聊天应用程序,但当我尝试发送照片时,它不会发送,只有当我发送两次后,它才会保存在数据库中

以下是我在logcat中得到的警告:

06-17 17:12:27.685 927-1000/? E/WifiConfigStore: updateConfiguration freq=2442 BSSID=f4:f2:6d:67:54:e8 RSSI=-59 "TP-LINK_54E8"WPA_PSK06-17 17:12:27.831 10830-11008/com.google.firebase.udacity.friendlychat E/StorageException: StorageException has occurred.
Object does not exist at location.
 Code: -13010 HttpResult: 404
{  "error": {    "code": 404,    "message": "Not Found.  Could not get object"  }}
java.io.IOException: {  "error": {    "code": 404,    "message": "Not Found.  Could not get object"  }}
    at bha.a(:com.google.安卓.gms.dynamite_dynamitemodulesc@12685024@12.6.85 (040406-197041431):147)
    at bha.a(:com.google.安卓.gms.dynamite_dynamitemodulesc@12685024@12.6.85 (040406-197041431):119)
    at bgu.onTransact(:com.google.安卓.gms.dynamite_dynamitemodulesc@12685024@12.6.85 (040406-197041431):7)
    at 安卓.os.Binder.transact(Binder.java:392)
    at com.google.安卓.gms.internal.firebase_storage.zza.transactAndReadExceptionReturnVoid(Unknown Source)
    at com.google.安卓.gms.internal.firebase_storage.zzm.zze(Unknown Source)
    at com.google.安卓.gms.internal.firebase_storage.zzq.zza(Unknown Source)
    at com.google.安卓.gms.internal.firebase_storage.zzf.zza(Unknown Source)
    at com.google.firebase.storage.zzc.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)06-17 17:12:28.091 927-927/? E/WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 1236 num clients 10
 packet count Tx=1047457 Rx=3285705 06-17 17:12:29.092 927-927/? E/WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 1236 num clients 10
 packet count Tx=1047458 Rx=3285706

下面是代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK) 
    {
        Uri selectedImageUri = data.getData();
        StorageReference photoRef = mSRreference.child(selectedImageUri.toString());
        photoRef.putFile(selectedImageUri);
        photoRef.getDownloadUrl().addOnSuccessListener(
            new OnSuccessListener<Uri>()

            @Override
            public void onSuccess(Uri uri)
            {
                Message m = new Message(null, mUsername, uri.toString());
                mDbReference.push().setValue(m);
            }
        );
    }
}

这里


共 (2) 个答案

  1. # 1 楼答案

    Uri selectedImageUri = data.getData();
    StorageReference photoRef = mSRreference.child(selectedImageUri.toString());
    photoRef.putFile(selectedImageUri).addOnSuccessListener(new 
    OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot){
            //taskSnapshot.getDownloadUrl()
            Message m = new Message(null, mUsername, taskSnapshot.getDownloadUrl().toString());
            mDbReference.push().setValue(m);
        }
    
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
            }
    });
    

    这将完成你的工作

  2. # 2 楼答案

    putFile()返回一个UploadTask,它最终指示文件已成功上载。你需要使用这个任务。看起来您已经熟悉了任务,因为您已经在使用getDownloadUrl()返回的任务来确定数据何时可用