2015-10-07 105 views
0

我的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和沒有任何幫助。我做錯了什麼?

+0

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

+0

遵循這些例子,沒有任何幫助。我應該用線程替換AsyncTask嗎? – KuKeC

+0

'我在這裏調用asyncTask GetOcitanja'。請完整顯示你是如何做到的。 – greenapps

回答

1
response= asyncTask.get(); 

刪除。

您已經有一個asyncTask.execute()。

處理onPostExecute()中的響應。

我問你之前,你怎麼叫你的異步任務,我認爲你使用獲得()。你打電話給它兩次,現在只顯示。

+0

所以'asyncTask.get();'和'asyncTask.execute();'做同樣的工作? – KuKeC

+0

謝謝,現在它工作:) – KuKeC

1

將您ProgressDialogonPreExecute,下面的示例代碼:

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

你有看到logcat上的任何東西嗎? – Tixeon

+0

你放的部分** response = asyncTask.get()**得到概率我猜 – Tixeon

相關問題