我的Android应用程序有一个AsyncTask
从我的服务器获取数据。当我从数据库中拉出几行时,它的速度非常快,我不需要在获取新数据时加载动画。如何在AsyncTask中显示ProgressDialog?
当我拉从数据库2,3k行,可能会慢下来,所以我决定用一些指标(加载动画),这样,用户就知道数据在后台收集。我得到了一个活动Fill_in_phone
,我拨打asyncTask
,名称为GetOcitanja
。
我对AsynTask
代码:
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class GetOcitanja extends AsyncTask<Object, Void, String> {
Activity _context;
String _str_mesg;
String _str_naslov;
public ProgressDialog progress;
public GetOcitanja(Activity context, String str_naslov, String str_message){
this._context = context;
this._str_naslov = str_naslov;
this._str_mesg = str_message;
}
@Override
protected void onPreExecute() {
//super.onPreExecute();
progress = ProgressDialog.show(_context, _str_naslov,
_str_mesg, true);
progress.show();
}
@Override
protected void onPostExecute(String s) {
//super.onPostExecute(s);
progress.dismiss();
}
@Override
protected String doInBackground(Object... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpRequest = new HttpGet(Config.url_get_ocitanja_async_taks);
String odg="";
try {
HttpResponse response = httpClient.execute(httpRequest);
HttpEntity entity = response.getEntity();
odg = EntityUtils.toString(entity, HTTP.UTF_8);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return odg;
}
正如你所看到的,我把2秒睡眠时间来模拟一个大的数据集。我把这种AsyncTask
在我Fill_in_Data
活动:
GetOcitanja asyncTask=new GetOcitanja(Fill_in_phone.this, "a","b");
asyncTask.execute();
String response="";
try {
response= asyncTask.get();
} catch (InterruptedException e1) {
e1.printStackTrace();
} catch (ExecutionException e1) {
e1.printStackTrace();
}
}
我跟着几个解决方案,从SO和没有任何帮助。我做错了什么?
http://stackoverflow.com/a/9814882/5202007 – Tauqir
遵循这些例子,没有任何帮助。我应该用线程替换AsyncTask吗? – KuKeC
'我在这里调用asyncTask GetOcitanja'。请完整显示你是如何做到的。 – greenapps