gpt4 book ai didi

Android ProgressDialog 结束得太早

转载 作者:行者123 更新时间:2023-11-30 00:34:02 27 4
gpt4 key购买 nike

我正在运行一个 AsyncTask,它会打开一个 HttpConnection 并使用它在 doInBackground 函数中下载 JSON。

这是我的异步任务:

    public class AsyncQueryTask extends AsyncTask<URL, Void, String>{
String jsonString = "";
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(LoginActivity.this);
progressDialog.setCancelable(false);
progressDialog.setMessage("Getting Ready...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setProgress(0);
progressDialog.show();
}

@Override
protected String doInBackground(URL... urls) {
URL restURL = urls[0];
try {
//--------------------------------------------
// Some initialization
//--------------------------------------------
HttpURLConnection urlCon = (HttpURLConnection) restURL.openConnection();
InputStream in = urlCon.getInputStream();
Scanner scan = new Scanner(in).useDelimiter("\\A");
jsonString = scan.hasNext()? scan.next() : "";

try{
JSONArray bookArr = new JSONArray(jsonString);
for(int i=0;i<bookArr.length();i++){
// Some JSON string processing...
}

} catch(Exception e){
Log.e("Err", "@Activity");
e.printStackTrace();
}
//----------------------------------------------------

return jsonString;
} catch(IOException ioe){
ioe.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
progressDialog.dismiss();
}
}

我在这里称它为:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
URL url = // URL for fetching JSON string
if (/*Some condition*/) {
//----------------------------------------------
// Some other tasks
//----------------------------------------------
AsyncQueryTask fbqt = new AsyncQueryTask();
fbqt.execute(url);

Intent intent = new Intent(context, NextActivity.class);
startActivity(intent);
}
}

如您所见,我在 onPreExecute() 中正确初始化了 progressDialog,并在 onPostExecute() 中对其进行了dismiss() 初始化。

问题是进度对话框只显示几分之一秒然后立即结束,导致应用转移到下一个 Activity ,而没有完全执行它在doInBackground() 部分。

我应该怎么做才能使 progressDialog 持续到 doInBackground() 线程完成?

最佳答案

您的方式可能会导致窗口泄漏。Intent intent = new Intent(context, NextActivity.class);
开始 Activity ( Intent );
将以上代码放在 onPostExecute() 方法中。

关于Android ProgressDialog 结束得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43710829/

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