2013-08-07 2 views
0

parse.com에서 이미지를 다운로드 중입니다. 나는 내가 가지고있을 이미지의 양을 결코 알지 못하기 때문에 그들을 찾기 위해 카운터를 사용하고있다. 웬일인지, 나의 계산대는 5에 도착하고, 이미지를 5 번 다운로드한다. 내 저장 장치에는 하나의 이미지 만 있습니다.여러 jpg를 SD 카드에 저장

String root = Environment.getExternalStorageDirectory().toString(); 
int i = 0; 

검색 이미지 : 여기

private void saveImagesInSdCard(Bitmap bmp, int i) { 


    File myDir = new File(root + "/clash_images"); 
    myDir.mkdirs(); 
    String fname = "Image"; 
    File file = new File(myDir, fname+i+".jpg"); 
    // if (file.exists()) file.delete(); 
    Log.d("IMAGE", "SAVED " +fname + i); 

    try { 
     FileOutputStream out = new FileOutputStream(file); 
     bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 
     out.flush(); 
     out.close(); 

    } catch (FileNotFoundException e1) { 
     e1.printStackTrace(); 
    } catch (IOException e2) { 
     e2.printStackTrace(); 
    } 


} 

saveImagesInSdCard() 내 로그 캣 내 모든 Log.d

08-07 12:54:45.586 10403-10403/com.codealchemist.clashmma D/query size: size is 5 int i is 0 
08-07 12:54:46.407 10403-10403/com.codealchemist.clashmma D/Data: We have data successfully 5 
08-07 12:54:46.527 10403-10403/com.codealchemist.clashmma D/IMAGE: SAVED Image5 
08-07 12:54:48.079 10403-10403/com.codealchemist.clashmma I/Choreographer: Skipped 100 frames! The application may be doing too much work on its main thread. 
08-07 12:54:48.089 10403-10403/com.codealchemist.clashmma D/Data: We have data successfully 5 
08-07 12:54:48.199 10403-10405/com.codealchemist.clashmma D/dalvikvm: GC_CONCURRENT freed 8524K, 20% free 38799K/48391K, paused 13ms+4ms, total 60ms 
08-07 12:54:48.199 10403-10403/com.codealchemist.clashmma D/IMAGE: SAVED Image5 
08-07 12:54:50.131 10403-10403/com.codealchemist.clashmma D/Data: We have data successfully 5 
08-07 12:54:50.181 10403-10403/com.codealchemist.clashmma D/IMAGE: SAVED Image5 
08-07 12:54:51.242 10403-10403/com.codealchemist.clashmma D/Data: We have data successfully 5 
08-07 12:54:51.312 10403-10403/com.codealchemist.clashmma D/IMAGE: SAVED Image5 
08-07 12:54:53.494 10403-10403/com.codealchemist.clashmma I/Choreographer: Skipped 323 frames! The application may be doing too much work on its main thread. 

을 보여주는 내

ParseQuery<ParseObject> query = ParseQuery.getQuery("fightGallery"); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> parseObjects, com.parse.ParseException e) { 
      if (e == null) { 

       int size = parseObjects.size(); 
       Log.d("query size", "size is " + size + " int i is " + i); 
       while (i < size) { 
        ParseFile fileObject = parseObjects.get(i).getParseFile("image"); 

        fileObject.getDataInBackground(new GetDataCallback() { 
         @Override 
         public void done(byte[] bytes, ParseException e) { 
          if (e == null) { 
           Log.d("Data", "We have data successfully " +i); 

           Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
           saveImagesInSdCard(bmp, i); 


          } else { 
           Log.d("ERROR: ", "" + e.getMessage()); 
           progressDialog.dismiss(); 
          } 
         } 
        }); 
        i++; 
       } 
      } else { 
       Log.d("ERROR:", "" + e.getMessage()); 
       progressDialog.dismiss(); 
      } 
     } 
    }); 

이것은 여기 내 코드입니다 내 logcat에서 볼 수 있듯이 내 i은 절대로 5에서 변경되지 않습니다.이 구조로 5 개의 이미지를 모두 다운로드 할 수 있습니까?

답변

0

제 문제는 GetDataCallback이 너무 오래 걸리는 것입니다. 그래서 내 카운터 i은 파일 이름을 설정하기 전에 5에 도달했습니다. 그래서 내 해결책은 내 GetDataCallback에 다른 카운터를 추가하는 것이 었습니다. 코드를 볼 필요가있을 경우 설명하십시오.

1

파일을 다운로드 한 후 GetDataCallback을 실행하면 루프가 5 번 실행되므로 i의 값은 매번 5가됩니다.

+0

나는 내 logcat에서 그것을 볼 수 있습니다. 하지만 왜 내 GetDataCallback을 5 번 실행하지 않고 5 개의 이미지를 모두 다운로드 할 수 있습니까? –

+0

제 'getdatacallback'은 5 번째 루프에서만 실행된다는 것을 알고 있습니다. 내 질문 헥터, 5 번 모두 실행되도록 데이터 콜을 다시받는 방법은 무엇입니까? –

+0

로그에서 볼 수 있듯이 5 번 실행됩니다. 문제는 콜백이 실행되기 전에 변경되는 변수를 사용하는 것입니다. –

관련 문제