2016-07-29 3 views
0

Я простое приложение для захвата изображения с помощью камеры, используя следующий коднастройка изображения URI дает Невозможно декодировать поток: java.io.FileNotFoundException:

@AfterPermissionGranted(RC_STORAGE_PERMS) 
private void launchCamera() { 
    Log.d(TAG, "launchCamera"); 

    // Check that we have permission to read images from external storage. 
    String perm = android.Manifest.permission.READ_EXTERNAL_STORAGE; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M 
      && !EasyPermissions.hasPermissions(this, perm)) { 
     EasyPermissions.requestPermissions(this, getString(R.string.rationale_storage), 
       RC_STORAGE_PERMS, perm); 
     return; 
    } 

    // Create intent 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    // Choose file storage location 
    File file = new File(Environment.getExternalStorageDirectory(), UUID.randomUUID().toString() + ".jpg"); 
    mFileUri = Uri.fromFile(file); 
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mFileUri); 

    // Launch intent 
    startActivityForResult(takePictureIntent, RC_TAKE_PICTURE); 
} 

теперь я хочу, чтобы загрузить этот образ Firebase хранения

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d(TAG, "onActivityResult:" + requestCode + ":" + resultCode + ":" + data); 
    if (requestCode == RC_TAKE_PICTURE) { 
     if (resultCode == RESULT_OK) { 
      if (mFileUri != null) { 
       uploadFromUri(mFileUri); 
      } else { 
       Log.w(TAG, "File URI is null"); 
      } 
     } else { 
      Toast.makeText(this, "Taking picture failed.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

private void uploadFromUri(Uri fileUri) { 
    Log.d(TAG, "uploadFromUri:src:" + fileUri.toString()); 

    // [START get_child_ref] 
    // Get a reference to store file at photos/<FILENAME>.jpg 
    final StorageReference photoRef = mStorageRef.child("photos") 
      .child(fileUri.getLastPathSegment()); 
    // [END get_child_ref] 

    // Upload file to Firebase Storage 
    // [START_EXCLUDE] 
    showProgressDialog(); 
    // [END_EXCLUDE] 
    Log.d(TAG, "uploadFromUri:dst:" + photoRef.getPath()); 
    photoRef.putFile(fileUri) 
      .addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        // Upload succeeded 
        Log.d(TAG, "uploadFromUri:onSuccess"); 

        // Get the public download URL 
        mDownloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); 
        Log.w("IMAGE_URL", "Path is " + mDownloadUrl.toString()); 
        uploadedImage = (ImageView) findViewById(R.id.uploaded_img); 

        try{// Here I'm setting image in ImageView        
         uploadedImage.setImageURI(mDownloadUrl); 
        }catch (Exception e){ 
         System.out.print(e.getCause()); 
        } 

        // [START_EXCLUDE] 
        hideProgressDialog(); 
        ///updateUI(mAuth.getCurrentUser()); 
        // [END_EXCLUDE] 
       } 
      }) 
      ); 
} 

в uploadFromUri() в строке

try{// Here I'm setting image in ImageView        
    uploadedImage.setImageURI(mDownloadUrl); 
}catch (Exception e){ 
    System.out.print(e.getCause()); 
} 

изображения не установлен в ImageView и I получаю ошибку

07-29 09:54:23.055 18445-18445/? W/IMAGE_URL: Path is https://firebasestorage.googleapis.com/v0/b/connectin-a74da.appspot.com/o/photos%2F7dd3d46f-ed7b-4020-bc89-fd9e19a8ec65.jpg?alt=media&token=5b4f9ad7-1e99-42b8-966d-50c74fc2eab6 
07-29 09:54:23.056 18445-18445/? E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: https:/firebasestorage.googleapis.com/v0/b/connectin-a74da.appspot.com/o/photos%2F7dd3d46f-ed7b-4020-bc89-fd9e19a8ec65.jpg?alt=media&token=5b4f9ad7-1e99-42b8-966d-50c74fc2eab6: open failed: ENOENT (No such file or directory) 

и если открыть эту ссылку, я вижу изображение есть, вопрос в том, почему он не установлен в виду изображения

ответ

4

setImageURI() для содержания Юрис частности к платформе Android , не URIs с указанием интернет Ресурсы.

Попробуйте получить растровое изображение из Интернета в новом потоке, а затем добавьте его в свой ImageView. Как это:

uploadedImage.setImageBitmap(getImageBitmap(mDownloadUrl)); 


private Bitmap getImageBitmap(String url) { 
     Bitmap bm = null; 
     try { 
      URL aURL = new URL(url); 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      bm = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 
     } catch (IOException e) { 
      Log.e(TAG, "Error getting bitmap", e); 
     } 
     return bm; 
    } 

Вы также можете использовать полезную библиотеку для установки изображения (внутренние и внешние изображения) под названием Picasso http://square.github.io/picasso/

0

Добавить библиотеку Пикассо для загрузки изображений и использовать следующий код.

Picasso.with(activity).load(imageURL) 
    .resize(imageWidth,imageHeight) 
    .into(imageView, new Callback() { 
     @Override 
     public void onSuccess() { 
      Log.d(TAG,"successfully load the image"); 
     } 

     @Override 
     public void onError() { 
      Log.d(TAG,"fail to load the image"); 
     } 
}); 
Смежные вопросы