2016-10-14 6 views
0

Я пытаюсь загрузить изображение в хранилище firebase после его захвата с камеры телефона, но когда я запускаю свой код, я получаю вышеуказанную ошибку. Я попытался проверить, если URI Возвращается пустой, как показано в этой строке кодаПопытка вызвать виртуальный метод 'java.lang.String android.net.Uri.getLastPathSegment()' на ссылку нулевого объекта

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

но сообщение Тост не получает отображается, но ошибка возникает в строке после тоста, который

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

Ниже весь мой код,

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

Кто-то помочь мне выяснить порога e проблема начинается, потому что я не могу сейчас на нее надавить ...

+0

Похоже, проблема такова: http://stackoverflow.com/questions/10386885/intent-filter-intent-getdata-returns-null –

ответ

1

Получил другой способ реализации этой функции. Надеюсь, это поможет кому-то.

Первое: Внутри OnCreate метод. Предполагая, что у вас уже есть ваш ImageButton (который будет ссылаться на камеру) и загрузить кнопку (чтобы загрузить вас изображение для firebase хранения), определенных в XML-файле, инициализировать ImageButton

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

Во-вторых: Установите приемник onclick для Баттон

 /** 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); 
     } 
    }); 

Третье: За пределами вашей OnCreate метода реализации startActivityForResult Я использовал Bitmap не 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(); 
       } 
     });} 
} 

Если это вам помогло, не забудьте подтвердить свой ответ.

Смежные вопросы

 Смежные вопросы