마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Firebase storage 질문 드립니다

0 추천

안녕하세요. Firebase 저장소에 mp4 파일을 업로드 / 다운로드 하는 앱을 만들고 있습니다.

적은양은 괜찮지만 많은양(1500개(10mb) 정도의 파일을 처리 해야합니다.)의 파일을 업로드 / 다운로드 하면아래와 같은 에러가 발생합니다.

   java.util.concurrent.RejectedExecutionException: Task com.google.firebase.storage.StorageTask$8@f8b80ec rejected from java.util.concurrent.ThreadPoolExecutor@235fcb5[Running, pool size = 2, active threads = 2, queued tasks = 128, completed tasks = 0]
                                                                         at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2049)
                                                                         at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:814)
                                                                         at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1360)
                                                                         at com.google.firebase.storage.zzd.zzu(Unknown Source)
                                                                         at com.google.firebase.storage.UploadTask.schedule(Unknown Source)
                                                                         at com.google.firebase.storage.StorageTask.zzaaP(Unknown Source)
                                                                         at com.google.firebase.storage.StorageReference.putFile(Unknown Source)
                                                                         at kr.laipsul.onycom.stt.Fragment.PlayerFragment.uploadAudio(PlayerFragment.java:250)
                                                                         at

화면은 프레그먼트로 구성하였고, 내장 메모리/aaa 폴더 내 파일을 리스트뷰로 보여주고 있습니다. 업로드 버튼을 선택하면

반복문으로 경로에 있는 파일들을 아래 uploadAudio() 함수에서 처리하도록 하고있습니다.

private void uploadAudio(String mFilePath, final String serverName) {
    //업로드 중 보여줄 ProgressDialog
    mProgress.setMessage("Uploading mp4..  ");
    mProgress.show();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    long ct = System.currentTimeMillis();
    final String strCT = sdf.format(ct);

    StorageReference filePath = mStorage.child(strCT).child(ServerName);
    Uri uri = Uri.fromFile(new File(mFilePath));

    filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            //업로드 후 처리
            mProgress.dismiss();
        }
    });
}

구글링 했을 때 최대 대기열보다 많은 양이 한번에 넘어가서 그런것 같은데요. 정리를 하면

uploadAudio() 함수를 호출할때 순서대로 처리하는 방법을 알고싶습니다.

belkin (340 포인트) 님이 2018년 1월 16일 질문

1개의 답변

0 추천
 
채택된 답변
putFile()를 하나의 파일만 수행하고 onSuccess() 콜백이 불리면 두번째(다음) 파일을 putFile()하는 방식으로

진행하면 되지 않을까요?
디자이너정 (42,810 포인트) 님이 2018년 1월 16일 답변
belkin님이 2018년 1월 18일 채택됨
조금 늦었지만 감사드립니다!!. 말씀해주신대로 처리하여 진행했습니다.
...