2017-06-13 13 views
0

Ich versuche, Image auf Firebase-Speicher hochzuladen, aber ich sehe weder den Fortschrittsdialog noch die Toast-Nachricht.Firebase Image Upload - Android

Der Debug-Breakpoint stoppt nicht einmal bei diesen Zeilen.

Bitte helfen.

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

arbeitete mich ans überprüfen und mich fragen, ob Sie haben] jede Abfrage –

+0

wenn Ihr Fortschritt Dialog nicht der Fall ist zeigen Sie, es scheint, als ob Ihr onActivityResult nicht einmal aufgerufen wird. Haben Sie den Code unter einem Debugger ausgeführt, um zu überprüfen, ob Sie in "onActivityResult" gelangen? –

+0

ja. Ich habe eine falsche Methode aufgerufen, nachdem ich die Absicht @FrankvanPuffelen bekommen habe –

Antwort

0

versuchen diese

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(); 
     } 
    } 
} 

}

vergessen Sie nicht, Regeln zu ändern in Feuerbasis Konsole

Standardmäßig dürfen wir nicht ohne Authentifizierung Feuerbasis Speicher zugreifen. Um es zu ändern, gehen Sie zur Firebase-Konsole mit einem beliebigen Webbrowser. Öffnen Sie das Firebase-Projekt, das Sie in den obigen Schritten verwendet haben, und gehen Sie zu Storage und dann auf die Registerkarte Regeln. Ändern Sie nun die Lese- und Schreibregeln auf "True", wie in der folgenden Abbildung gezeigt.

enter image description here

+0

von dem, was ich in der Frage sehe, OP verwendet bereits Firebase Storage. –

0

diese Methode versuchen, seine für mich

Innen 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){ 

        }