作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行一个 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);
将以上代码放在 onPostExecute() 方法中。
开始 Activity ( Intent );
关于Android ProgressDialog 结束得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43710829/
每当用户旋转手机时,我都需要读取 DIV 的像素宽度。在 iOS 上,以下代码将在方向完成后打印出 DIV 的宽度。但是,在 Android 上,代码将在方向开始之前打印出 DIV 的宽度。 HTML
我的网站正在使用jquery.load()在页面的一大块上进行导航。我真的很欣赏只包含加载内容的特定部分的能力,这里是 id="content"的 div: $(frame_selector).loa
我是一名优秀的程序员,十分优秀!