У меня появилось одно приложение AsyncTask
, которое получает данные с моего сервера. Когда я вытаскиваю несколько строк из базы данных, это делается очень быстро, и мне не нужна анимация загрузки, когда она получает свежие данные.Как отобразить ProgressDialog в AsyncTask?
Когда я вытаскиваю 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 на Thread? – KuKeC
', где я вызываю asyncTask GetOcitanja.'. Пожалуйста, покажите, как вы это делаете. – greenapps