2017-06-17 16 views
0

バックアップ写真アプリを作成しようとしています。
すべての画像をFirebaseにアップロードする必要があります。私がそれを起動すると、アプリはいくつかの写真を完全にアップロードしますが、このレポートではクラッシュします。*すべての*写真をFirebaseにアップロード

java.util.concurrent.RejectedExecutionException:タスク[email protected]ランニング[[email protected]から拒否、プールサイズ= 2、アクティブなスレッド= 2 、キューに入れられたタスク= 128、完了したタスク= 0]

コード:

 StorageReference storage_photos=FirebaseStorage.getInstance().getReference(); 





private void tryToTakePhotos() { 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { 
     if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { 
      try { 
       final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID}; 
       final String orderBy = MediaStore.Images.Media._ID; 
       //Stores all the images from the gallery in Cursor 
       Cursor cursor = getContentResolver().query(
         MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, 
         null, orderBy); 
       int count = cursor.getCount(); 
       int dataColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA); 

       Toast.makeText(this, "dd" + count, Toast.LENGTH_SHORT).show(); 
       storage_photos = storage_photos.child(name + "---" + count + "photos"); 


       for (int i = 0; i < count; i++) { 

        cursor.moveToPosition(i); 
        String filePath = cursor.getString(dataColumnIndex); 
        //Bitmap bitmap = BitmapFactory.decodeFile(filePath); 

        File file = new File(filePath); 
        Uri uri = Uri.fromFile(file); 
        StorageReference riversRef = storage_photos.child(uri.getLastPathSegment()); 
        riversRef.putFile(uri); 
       } 
       cursor.close(); 
       Calendar calendar = Calendar.getInstance(); 
       firebase_takePhotos.setValue("taken at: " + calendar.get(Calendar.DAY_OF_MONTH) + "-" 
         + (calendar.get(Calendar.MONTH) + 1) + "-" 
         + calendar.get(Calendar.YEAR)); 


      }catch (Exception e){ 
       firebase_takePhotos.setValue(""+e); 
      } 
     } 
    } 


} 
+1

何らかの理由でキューに登録されたトランザクションが100件あるため、例外が発生していますか?何らかの形でトランザクションをループで作成していますか? –

答えて

0

128はキットカットだけで128タスクをキューに入れることができます前に、あなたはタスク 実装の最大数に達したことを示し=タスクをキューに入れられました。上記の場合、RejectedExecutionExceptionが発行されます。だから私はあなたが作成されたタスクの数を減らすことをお勧めします。

1

私は、ループ内のすべての項目のためにあなたが128のタスクのキューをその結果、全体の新しい参照を作っているので問題はループ

StorageReference riversRef = storage_photos.child(uri.getLastPathSegment()); 

にこのラインであると思います。ファイルを置くと非同期にファイルがアップロードされるため、非同期タスクがたくさん作成されます。

関連する問題