【发布时间】:2015-08-27 11:24:29
【问题描述】:
您好,我有一个从网站数据库获取用户的功能 我的功能
private void get_users() {
try {
url = "my address";
dbGetData3 = new DbGetData();
new Thread(new Runnable() {
public void run() {
data = dbGetData3.getDataFromDB(url);
runOnUiThread(new Runnable() {
@Override
public void run() {
userha = parseJSON3(data);
}
});
}
}).start();
Toast.makeText(context, "please wait ", Toast.LENGTH_LONG)
.show();
} catch (Exception e) {
toast(9);
}
现在我想在获取数据完成时添加一个加载进度条。
我像这样使用 AsyncTask:
private class LongOperation extends AsyncTask<String, Void, String> {
protected void onPreExecute() {
progressDialog = new ProgressDialog(Login.this);
progressDialog.setTitle("Processing...");
progressDialog.setMessage("Please wait...");
progressDialog.setCancelable(true);
progressDialog.show();
}
protected String doInBackground(String... params) {
try {
get_users();
} catch (Exception e) {
}
return null;
}
protected void onPostExecute(String result) {
progressDialog.dismiss();
}
}
我使用此代码执行
mytask = new LongOperation();
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
mytask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
mytask.execute();
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
onCreate(savedInstanceState);
}
});
但我没有显示进度对话框(让用户工作)
我像这样更改我的代码:
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){
mytask.onPreExecute();
mytask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else
{
mytask.onPreExecute();
mytask.execute();
}
然后我的进度对话框总是显示
我在 stackoverflow 中测试其他代码,例如
AsyncTask doInBackground does not run
AsyncTask called from Handler will not execute doInBackground
Android SDK AsyncTask doInBackground not running (subclass)
但这对我不起作用 请帮我坦克你
【问题讨论】:
-
写 super.onPreExecute();在你的 onPreExecute()
-
进度对话框始终显示
-
如果它总是显示然后关闭它。简单。
-
此外,我建议在完成此操作后转到 googl'e 自己的 volley 库进行网络调用并使用模型类来设置您的数据。这是一种模块化且更好的方法
-
我把解雇,但那是行不通的
标签: android android-asynctask progressdialog