2016-10-14 3 views
0

J'essaye de télécharger l'image vers le stockage Firebase après l'avoir capturé depuis la caméra du téléphone, mais lorsque je lance mon code, j'obtiens l'erreur ci-dessus. J'ai essayé de vérifier si l'URI retournée est nulle comme indiqué dans cette ligne de codeTentative d'invocation de la méthode virtuelle 'java.lang.String android.net.Uri.getLastPathSegment()' sur une référence d'objet nul

Toast.makeText(UploadImage.this, "YOUR URI IS NULL", Toast.LENGTH_LONG).show();

mais le message Toast ne s'affiche, mais l'erreur est jeté pas dans la ligne suivante du pain grillé qui est

filepath = storageReference.child("PhotoModel").child(uri.getLastPathSegment());

ci-dessous est mon code entier,

public class UploadImage extends AppCompatActivity { 

private Button mUploadImg; 
private ImageView mImageView; 
private StorageReference storageReference, filepath; 
private ProgressDialog progressDialog; 
private static final int CAMERA_REQUEST_CODE = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_upload_image); 
    storageReference = FirebaseStorage.getInstance().getReference(); 

    mUploadImg = (Button) findViewById(R.id.btnUploadImg); 
    mImageView = (ImageView) findViewById(R.id.imgView); 
    progressDialog = new ProgressDialog(this); 
    mUploadImg.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent Imgintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(Imgintent, CAMERA_REQUEST_CODE); 

     } 
    }); 

} 

@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("Upload Image ..."); 
     progressDialog.show(); 

     Uri uri = data.getData(); 
     if (uri == null) { 


      Toast.makeText(UploadImage.this, "YOUR URI IS NULL", Toast.LENGTH_LONG).show(); 
     } 
     filepath = storageReference.child("PhotoModel").child(uri.getLastPathSegment()); 
     filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       progressDialog.dismiss(); 

       Toast.makeText(UploadImage.this, "Uploading ...", Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } else { 
     Toast.makeText(UploadImage.this, "Upload Failed...Check your Internet Connection", Toast.LENGTH_LONG).show(); 
    } 
    } 
} 

Quelqu'un me aider à wher Le problème commence, parce que je ne peux pas vraiment mettre le doigt dessus en ce moment ...

+0

On dirait que le problème est le même que: http://stackoverflow.com/questions/10386885/intent-filter-intent-getdata-returns-null –

Répondre

1

Vous avez une autre façon d'implémenter cette fonctionnalité. J'espère que ça aide quelqu'un.

Première: méthode Inside onCreate. En supposant que vous avez déjà votre ImageButton (qui invoquera la caméra) et télécharger bouton (pour télécharger vous image pour Firebase stockage) défini dans le fichier xml, Initialiser votre ImageButton

/** Button for adding and Uploading image*/ 
    mUploadImg = (ImageButton) findViewById(R.id.btnUploadImg); 

Deuxième: Définir un unclick listener pour le Imagebutton

 /** Capture Image save and pass it to an intent */ 
    mUploadImg.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent Imgintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(Imgintent, CAMERA_REQUEST_CODE); 
     } 
    }); 

Troisième: En dehors de votre méthode onCreate, mettre en œuvre startActivityForResult Je l'ai utilisé Bitmap pas Uri

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) { 
     //set the progress dialog 
     progressDialog.setMessage("Uploding image..."); 
     progressDialog.show(); 

     //get the camera image 
     Bundle extras = data.getExtras(); 
     Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     byte[] databaos = baos.toByteArray(); 

     //set the image into imageview 
     mImageView.setImageBitmap(bitmap); 
     //String img = "fire" 

     //Firebase storage folder where you want to put the images 
     StorageReference storageRef = FirebaseStorage.getInstance().getReference(); 

     //name of the image file (add time to have different files to avoid rewrite on the same file) 
     StorageReference imagesRef = storageRef.child(productname + new Date().getTime()); 
     //send this name to database 
     //upload image 
     UploadTask uploadTask = imagesRef.putBytes(databaos); 
     uploadTask.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       Toast.makeText(UploadImage.this, "Sending failed", Toast.LENGTH_SHORT).show(); 
      } 
     }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       productDownloadUrl = taskSnapshot.getDownloadUrl().toString(); 
       progressDialog.dismiss(); 
       } 
     });} 
} 

Si cela vous a aidé, n'oubliez pas de reconnaître ma réponse.