2013-03-06 31 views
0

我都與AsyncTask卡在一起,與參數,進度,結果相混淆。在我的應用程序中,我需要在圖庫中顯示圖像 。該網址包含所有圖片。我通過JSON獲取這些圖像URL並將響應保存在一個數組列表中,並將其傳遞給新的 活動。但是,我可以將JSON響應保存在名爲「image_urls」的數組列表中。正如Iam剛接觸android時,我很困惑在後臺和asynctask中提供哪些參數應該是 。提前致謝。如何在Android應用程序中使用AsyncTask

以下是我已經創建了單獨的類,在doInBackground蔭獲取的reuired項目使用JSON.I很困惑什麼的所有參數,我應該把裏面的AsyncTask和doInBackground

public abstract class Images1 extends AsyncTask<Void, Integer, Void>{ 
     private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; 
     private static String url = "http://www.ttt.com/album_pro/array_to_encode"; 

     ArrayList<String> urlList = new ArrayList<String>(); 
     JSONParser jParser = new JSONParser(); 
     ArrayList<String> image_urls = new ArrayList<String>(); 


     protected ArrayList<String> doInBackground(Void... params) { 
       JSONObject json = jParser.getJSONFromUrl(url); 

        try{ 
       JSONObject seo = json.getJSONObject("SEO"); 
       JSONArray folio = seo.getJSONArray("Folio"); 

       JSONArray image_urls1 = new JSONArray(); 
       String s1=seo.getString("Folio"); 

           for(int i=0;i<folio.length();++i) 
           { 
          String m = folio.getString(i); 
          Log.v("M"+i,m); 
          image_urls.add(m+ ","); 

           } 
        } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
       return image_urls; 
      } 

      protected void onProgressUpdate(Integer... progress) { 

      } 


      protected void onPostExecute(String[] result) { 

      } 

    } 
+0

請參考[這裏](http://www.androidhive.info/2012/10/android-multilevel-listview-tutorial/)例如 – Harish 2013-03-06 09:28:32

+0

瞭解的AsyncTask的一般類型的http:/ /developer.android.com/reference/android/os/AsyncTask.html – vokilam 2013-03-06 09:34:10

回答

1

試試這個,

public class GetTask extends AsyncTask<Void, Void, Integer> { 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     mPreogressDialog = ProgressDialog.show(Mainactivity.this, 
       "Loading", "Please wait"); 
    } 

    @Override 
    protected Integer doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     //Do your stuff here call ur methods 
        imagedownload(); 
     return 0; 
    } 

    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 
     // TODO Auto-generated method stub 
     if (mPreogressDialog.isShowing()) 
      mPreogressDialog.dismiss(); 


    } 

} 

public vlid imagedownload(){ 
JSONObject json = jParser.getJSONFromUrl(url); 

       try{ 
      JSONObject seo = json.getJSONObject("SEO"); 
      JSONArray folio = seo.getJSONArray("Folio"); 

      JSONArray image_urls1 = new JSONArray(); 
      String s1=seo.getString("Folio"); 

          for(int i=0;i<folio.length();++i) 
          { 
         String m = folio.getString(i); 
         Log.v("M"+i,m); 
         image_urls.add(m+ ","); 

          } 
       } 
       catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 
} 
1

如果你看到http://developer.android.com/reference/android/os/AsyncTask.html,他們已經很好地解釋了AsyncTask。

但是,如果你不明白這一點,讓我試試看:

的Android通過一個線程,即所謂的UI線程修改用戶界面。如果您直接在UI線程上執行長時間運行的操作,例如從互聯網上下載文件,則應用程序的用戶界面將「凍結」直到相應的任務完成。

的AsyncTask能夠正確且容易使用的UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。

爲了使用AsyncTask類,您必須擴展它並覆蓋至少doInBackground()方法。

,你將需要實現最常用的方法是這些:

  1. onPreExecute() - 稱爲UI線程的線程開始運行之前。此方法通常用於設置任務,例如通過顯示進度條。

  2. doInBackground(Params…) - 這是在後臺線程上運行的方法。在這種方法中,你應該把你想讓應用程序在後臺執行的所有代碼。完成後,它將結果發送到onPostExecute()。

  3. onProgressUpdate() - 在調用doInBackground()中的publishProgress()時調用。

  4. onPostExecute(Result) - 在後臺線程完成後調用UI線程。它將從doInBackground()收到的結果作爲參數。

AsyncTask是一個通用類,它採用3種類型:AsyncTask<Params, Progress, Result>.

Params - 輸入端。你傳遞給AsyncTask的東西(它可以是從哪裏下載文件的URL)

Progress - 如果有任何更新,傳遞給onProgressUpdate()(如果要顯示下載進度,則使用此參數在UI上處理)

Result - 輸出。什麼返回doInBackground()來onPostExecute()

相關問題