2015-10-07 4 views
0

У меня появилось одно приложение 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 и ничего не помогало. Что я сделал не так?

+0

http://stackoverflow.com/a/9814882/5202007 – Tauqir

+0

последовали за этими примерами и ничего не помогли. Должен ли я заменить AsyncTask на Thread? – KuKeC

+0

', где я вызываю asyncTask GetOcitanja.'. Пожалуйста, покажите, как вы это делаете. – greenapps

ответ

1
response= asyncTask.get(); 

удалить это.

У вас уже есть asyncTask.execute().

Обращайтесь с ответом в onPostExecute().

Я спросил вас раньше, как вы назвали свою задачу async, как я предполагал, что вы использовали .get(). Вы называете это дважды и показывается только сейчас.

+0

так 'asyncTask.get();' и 'asyncTask.execute();' выполняет ту же работу? – KuKeC

+0

Спасибо, теперь это работает :) – KuKeC

1

Место вашего ProgressDialog в onPreExecute, пример кода ниже:

private ProgressDialog pdia; 

@Override 
protected void onPreExecute(){ 
    super.onPreExecute(); 
     pdia = new ProgressDialog(yourContext); 
     pdia.setMessage("Loading..."); 
     pdia.show();  
} 

@Override 
protected void onPostExecute(String result){ 
    super.onPostExecute(result); 
     pdia.dismiss(); 
} 

https://stackoverflow.com/a/25998219/5202007

1
public GetOcitanja(Activity context, String str_naslov, String str_message){ 
    this._context = context; 
    this._str_naslov = str_naslov; 
    this._str_mesg = str_message; 
    progressDialog = new ProgressDialog(_context); 
    progressDialog.setTitle("Progress"); 

} 

вы можете попробовать создать диалог прогресса внутри конструктора

+0

Это была моя первая версия кода, если вы посмотрите в ревизию. Я получил предложение, я должен положить его в onPreExecute. – KuKeC

+0

У вас что-нибудь видели на логарифме? – Tixeon

+0

часть, где u put ** response = asyncTask.get() ** получил prob i guess – Tixeon

Смежные вопросы