2014-02-14 63 views
0

我有一個關於異步任務的一個問題的AsyncTask(異步處理)

Async from android

使用2個活動 「A」,並輸入一個字 「B」

從URL和和存儲搜索值在DTO中,然後從getter和setter中獲取值。

我的併發症是我在我的活動「B」中實現了異步,並且該活動正從相同的DTO中獲取值。

問題是,我的帖子如何知道在後臺做的事情已經從DTO取得了價值,DTO從互聯網取得了價值...在互聯網連接速度慢的情況下。

我米從「A」發送意圖「B」和顯示在「B」

問題的結果:

1.如果我異步除去然後應用會顯示黑色的頁,並且還凍結(僅在連接速度慢的情況下),但數據顯示

2.如果我使用aync然後有時候進展很長一段時間,知道這些數據的inspite對話框顯示已經顯示在UI

代碼鏈接https://www.dropbox.com/s/p27rpokz68sryv3/SearchData.java

https://www.dropbox.com/s/rm3i52djiay327u/SearchData_DTO.java

https://www.dropbox.com/s/2hpufx2a12480on/Search.java

PLS建議我要這個

關於可能的解決方案

+2

沒有看到你的代碼,我們什麼都不能說。請發佈您的代碼。 – InnocentKiller

+1

你可以發佈你的代碼嗎? –

回答

1

你需要監聽asyntask完整的聽衆,對於讓您的活動一個impliment界面並調用該方法f ROM活動B,S Asyntask,S onpostexecute方法 這樣的活動爲您會知道B已經完成了他的任務,你可以做接下來的事情.. 希望這有助於

public interface AsyncTaskCompletedListener { 
     public void OnResultSucceeded(String result); 
    } 

    public class LoginAsyncTask extends AsyncTask<String, Void, String> { 
     AsyncTaskCompletedListener mAsyncTaskCompletedListener; 

     @Override 
     protected String doInBackground(String... arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 

      mAsyncTaskCompletedListener.OnResultSucceeded(result); 
     } 
    } 

這裏的界面,讓活動一個impliment this和from Activity從這個onpostexecute調用這個

From Activity A 

LoginAsyncTask customloginasync = new LoginAsyncTask(getActivity(), 
       FATCH_USER_LIST, arglist); 

     customloginasync.execute(); 

     customloginasync.setOnResultsListener(new AsyncTaskCompletedListener() { 

      @Override 
      public void OnResultSucceeded(String result, int asyncTaskNo) { 

       Logger.logInfo("CustomLogin data=========" + result); 

       ParseAvailableUserData(result); 

      } 
     }); 
+0

感謝您的建議:)乾杯:P – Gattsu