task.getResult()抛出java.lang.ClassCastException

时间:2019-01-18 04:29:33

标签: android firebase firebase-storage

我正在使用太多开发人员建议的功能,以检索存储在Firebase存储中的图像的Uri,这是我的代码:

final StorageReference filereference = storageReference.child(System.currentTimeMillis()
                    +"."+getFileExtension(imageUri));
uploadTask =filereference.putFile(imageUri);
uploadTask.continueWith(new Continuation<UploadTask.TaskSnapshot,Task<Uri>>() {
  @Override
  public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws 
  Exception {
             if(!task.isSuccessful()){
             throw task.getException();
             }
             return filereference.getDownloadUrl();

}

}).addOnCompleteListener(new OnCompleteListener<Uri>() {
 @Override
 public void onComplete(@NonNull Task<Uri> task) {
 if(task.isSuccessful()){
 try{
     Uri downloadUri = task.getResult();
     String mUri =downloadUri.toString();
     }catch (Exception e){
     Log.e("testingerror",e.toString());
     }

它抛出了这个错误: com.example.asus.fireapp E / stayinsh:java.lang.ClassCastException:com.google.android.gms.tasks.zzu无法转换为android.net.Uri

2 个答案:

答案 0 :(得分:0)

如果您使用的FirebaseStorage Api为10.0.1或更小,则您的代码应该可以使用 我的意思是  实施“ com.google.firebase:firebase-storage:10.0.1”以下

但更多使用

StorageReference filepath=user_Image_ref.child(user_id+".jpg");
        filepath.putFile(resulturi).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                if(task.isSuccessful()) {
                    String getimageurl = task.getResult().getDownloadUrl().toString();

                    databaseReference.child("PHOTO").setValue(getimageurl);


                }else {
                    Toast.makeText(Register_activity.this,"errr",Toast.LENGTH_LONG).show();

                }
                String getimageurl = task.getResult().getDownloadUrl().toString();

                databaseReference.child("PHOTO").setValue(getimageurl);
            }
        });

答案 1 :(得分:0)

它应该是continueWithTask,而不是continueWith

uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot,Task<Uri>>() {
  @Override
  public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws 
  Exception {
             if(!task.isSuccessful()){
             throw task.getException();
             }
             return filereference.getDownloadUrl();

}