gpt4 book ai didi

java - onPostExecute 被调用两次并显示双倍结果

转载 作者:行者123 更新时间:2023-12-02 10:42:21 26 4
gpt4 key购买 nike

我正在尝试在后台下载一些文件,为此我使用了下载管理器并制作了此方法:

/*** media download ***/
public long mediaDownload(ArrayList<DownloadedFile> arrayList, String foldPathName) {
long downloadReference = 0;

// Create request for android download manager
downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

for (int i = 0; i < arrayList.size();i++){

DownloadManager.Request request = new DownloadManager.Request(arrayList.get(i).getUri());
request.setTitle("Data Download");
request.setDescription("New media");

//Set the local destination for the downloaded file to a path
//within the application's external files directory
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS + "/" + folder_main + "/" + foldPathName, arrayList.get(i).getName());
File f = new File(Environment.DIRECTORY_DOWNLOADS + "/" + folder_main + "/" + foldPathName + "/" + arrayList.get(i).getName());
Log.e("File:",f.toString());

//Enqueue download and save into referenceId
downloadReference = downloadManager.enqueue(request);

}
return downloadReference;
}

我有一个图片和一个视频要下载进行测试,当在资源管理器中检查下载的文件时,我发现2个视频和2个图片,调试发现onPostExecute方法被调用了两次,我不明白为什么。

这是我的 onPostExecute 方法:

 protected void onPostExecute(String s) {
try {
JSONObject jsonObject = new JSONObject(s);
JSONArray region = null;
region = jsonObject.getJSONArray("regions");
Log.e("Regions:", String.valueOf(region.length()));
for (int i = 0; i < region.length(); i++) {
try {
JSONObject json_data = region.getJSONObject(i);
int height_view = Integer.parseInt(json_data.getString("height"));
int width_view = Integer.parseInt(json_data.getString("width"));

int left_view = Integer.parseInt(json_data.getString("left"));
int top_view = Integer.parseInt(json_data.getString("top"));
int right_view = Integer.parseInt(json_data.getString("right"));
int bottom_view = Integer.parseInt(json_data.getString("bottom"));

/**** Media in region ***/
JSONObject media = json_data.getJSONObject("media");
String type_media = media.getString("type");

url = media.getString("url");
name = media.getString("name");
uri = Uri.parse(url);
} catch (JSONException e) {
e.printStackTrace();
}
downloadedFiles.add(new DownloadedFile(name, uri));
}
Toast.makeText(MainActivity.this, "Layout Created with" + height + "x" + width, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
Log.e("Downloaded Files:",downloadedFiles.toString());
mediaDownload(downloadedFiles, folderName); // region media's download
}

在我的 logcat 上,我看到我的 arrayList 有 2 个元素,但显示了两次,这意味着文件被下载了两次,因此 onPostExecute 方法调用了两次,感谢您的帮助。

最佳答案

我在调试所有代码后发现,当创建 Activity 时,它会更改屏幕方向,因此它会创建第二个实例,因此我的 AsyncTask 被调用两次,这就是为什么我认为 onPosteExecute 被调用两次,谢谢对于所有试图提供帮助的人。

关于java - onPostExecute 被调用两次并显示双倍结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52849637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com