2017-06-13 117 views
0

我想將圖片上傳到firebase存儲,但我沒有看到進度對話框和吐司消息。Firebase圖片上傳 - Android

調試斷點甚至不在這些行停止。

請幫忙。

ib_profileImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent_modifyImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivity(intent_modifyImage); 
     } 
    }); 
} 

//Image Capture Activity Result 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK){ 
     progressDialog.setMessage("Uploading Image..."); 
     progressDialog.show(); 
     Uri uri = data.getData(); 
     StorageReference filepath = storageReference_image.child("profile_photos").child(uri.getLastPathSegment()); 
     filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       Toast.makeText(UserProfileActivity.this,"Upload Complete",Toast.LENGTH_SHORT).show(); 
       progressDialog.dismiss(); 
      } 
     }); 
    } 
} 
+0

檢查我答,問我,如果你有任何查詢 –

+0

如果你的進度對話框不顯示,它看起來像你的'onActivityResult'甚至沒有被調用。你是否在調試器下運行代碼來驗證你是否進入了'onActivityResult'? –

+0

是的。我在獲得意圖後調用了錯誤的方法@FrankvanPuffelen –

回答

0

試試這個

public class MainActivity extends AppCompatActivity { 
Button chooseImg, uploadImg; 
ImageView imgView; 
int PICK_IMAGE_REQUEST = 111; 
Uri filePath; 
ProgressDialog pd; 

//creating reference to firebase storage 
FirebaseStorage storage = FirebaseStorage.getInstance(); 
StorageReference storageRef = storage.getReferenceFromUrl("gs://fir-example-c4312.appspot.com"); //change the url according to your firebase app 


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

    chooseImg = (Button)findViewById(R.id.chooseImg); 
    uploadImg = (Button)findViewById(R.id.uploadImg); 
    imgView = (ImageView)findViewById(R.id.imgView); 

    pd = new ProgressDialog(this); 
    pd.setMessage("Uploading...."); 


    chooseImg.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_PICK); 
      startActivityForResult(Intent.createChooser(intent, "Select Image"), PICK_IMAGE_REQUEST); 
     } 
    }); 

    uploadImg.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(filePath != null) { 
       pd.show(); 

       StorageReference childRef = storageRef.child("image.jpg"); 

       //uploading the image 
       UploadTask uploadTask = childRef.putFile(filePath); 

       uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
        @Override 
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
         pd.dismiss(); 
         Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_SHORT).show(); 
        } 
       }).addOnFailureListener(new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception e) { 
         pd.dismiss(); 
         Toast.makeText(MainActivity.this, "Upload Failed -> " + e, Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
      else { 
       Toast.makeText(MainActivity.this, "Select an image", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 
     filePath = data.getData(); 

     try { 
      //getting image from gallery 
      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 

      //Setting image to ImageView 
      imgView.setImageBitmap(bitmap); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}

不要忘了火力控制檯

更改規則默認情況下我們是不允許不經認證訪問火力存儲。使用任何網絡瀏覽器轉到Firebase控制檯。打開您在上述步驟中使用的Firebase項目,然後轉到「存儲」,然後選擇「規則」選項卡。現在將讀取和寫入規則更改爲true,如下圖所示。

enter image description here

+0

中查看,OP已在使用Firebase存儲。 –

0

試試這個方法,它的工作對我來說

裏面onActivityResult,

 StorageReference storageRef = storage.getReferenceFromUrl(---STORAGE_BUCKET---); 
        StorageReference imagePathReference = storageRef.child("image"); 
        final Uri uri = data.getData(); 
        Bitmap bmp = null; 
        try { 
         bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

     // convert bitmap to byte array to save image in firebase storage 
        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
        if (bmp != null) { 
         bmp.compress(Bitmap.CompressFormat.JPEG, 60, bos); 
        } 
        byte[] dataNew = bos.toByteArray(); 


    uploadTask = imagePathReference.putBytes(dataNew); 
        try { 
         uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
          @Override 
          public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
          // success 
          } 

         }); 
        }catch (Exception e){ 

        }