【问题标题】:Saving multiple jpgs to sd card将多个 jpg 保存到 SD 卡
【发布时间】:2013-08-07 19:02:57
【问题描述】:

我正在从parse.com 下载图像。我永远不知道我将拥有多少图像,所以我使用计数器来检索它们。出于某种原因,我的计数器变为 5,并下载了 5 次图像。在我的存储中,我只有一张图像。这是我的代码:

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

检索图像:

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

这是我的saveImagesInSdCard()

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


}

这是我的 logcat,显示了我所有的 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.

如您所见,在我的 logcat 中,我的 i 永远不会从 5 更改。我如何构建它以下载所有 5 个图像?

【问题讨论】:

    标签: android save jpeg counter parse-platform


    【解决方案1】:

    当你的GetDataCallback在文件下载后执行时,循环已经运行了5次,因此i的值每次都是5。

    【讨论】:

    • 我可以从我的 logcat 中看到。但是为什么没有运行我的GetDataCallback 5 次,所以我可以下载所有 5 张图片?
    • 我了解我的getdatacallback 仅在第 5 次循环中运行。我的问题 Hector,我如何才能让我的数据调用全部运行 5 次?
    • 它运行了五次,您可以在日志中看到。问题在于在执行回调之前使用正在变异的变量。
    • 我的回调后i++不是被“变异”了吗?
    • 我是否放错了while 循环?
    【解决方案2】:

    我的问题是GetDataCallback 花费的时间太长。所以我的计数器i 在设置文件名之前已经到了 5。所以我的解决方案只是在我的GetDataCallback 中添加另一个计数器。如果您需要查看代码,请发表评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2014-03-13
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多