2012-03-20 120 views
0

我有以下問題。 我有一個名爲「A」的類,我在其中創建了一個列表「List dStruct」。 我在「A」類中修改了這個對象,我想將它傳遞給一個Activity以供進一步使用。Android:如何將對象從簡單的類傳遞到活動

另外「A」類擴展了AsyncTask。

在這種情況下,如何將對象傳遞給Activity?

下面是活動代碼:

List dStruct; //the object I want to access

btnPlanTrip.setOnClickListener(new OnClickListener() {

 tripReq = new TripRequest(MainActivity.this); 
    tripReq.execute(request); 
    dStruct=tripReq.dStruct; 


    String str= dStruct.get(0).name; 

} 

下面是類的代碼「A」

public class TripRequest extends AsyncTask {

List dStruct;

public TripRequest(MainActivity activity) { 
    this.activity = activity; 
    dStruct=new ArrayList <DirectionsStruct>(); 
    progressDialog = new ProgressDialog(activity); 

}

protected void onPostExecute(Long result) {

code for dStruct 

} 

}

+0

你從你的活動叫 「A」 級? – 207 2012-03-20 20:50:54

+0

看到這個[傳遞一個自定義數據對象](http://stackoverflow.com/questions/6722463/how-to-pass-a-custom-data-object-within-a-intent) – 2012-03-20 21:00:16

+0

如果我沒有弄錯,你提出的方法涉及將一個對象從一個活動傳遞給另一個活動。 「A」類不擴展活動,但它擴展了AsyncTask,如上所示(我編輯了代碼) – 2012-03-21 13:58:00

回答

2

我解決了使用Handler s此問題。在我的自定義AsyncTask中,我將一個處理程序從一個Activity傳遞給構造函數。在AsyncTask的onPostExecute中,我調用Handler.sendMessage並將任何數據發送回活動。

的AsyncTask代碼(你的「A」級)

public class MyAsyncTask extends AsyncTask<RestClient, Void, RestResponse> { 
    Handler handler; 

    public MyAsyncTask(Handler handler) { 
     this.handler = handler; 
    } 

    @Override 
    protected RestResponse doInBackground(RestClient... rc) { 
     // Get data from web service or whatever... 
    } 

    @Override 
    protected void onPostExecute(RestResponse response){ 
     Message msg = Message.obtain(); 
     msg.obj = response; 
     this.handler.sendMessage(msg); 
    } 
} 

處理器在活動宣佈從活動

private Handler activityHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      // Do something with msg.obj 
    }; 

電話的AsyncTask傳遞處理程序,以構造函數(在你的按鈕單擊事件處理程序做到這一點)

MyAsyncTask async = new MyAsyncTask(activityHandler); 
async.execute(...); 
+0

你能舉個例子嗎?我根據點擊事件調用「A」類。 – 2012-03-21 12:17:33

+0

使用示例代碼更新了答案 – Gady 2012-03-21 17:38:15

+0

首先感謝您的快速解答。其次,我如何將dStruct傳遞給消息?它是這樣做的嗎? msg.obj = dStruct。第三,我如何通過活動訪問它?我不太明白。對不起造成您的不便,但我是編程 – 2012-03-21 21:19:31

2

任意的Java對象不是真正一流的結構形成一個Android點看法。

「主」線程通過活動/廣播接收器/服務/內容提供者/視圖輸入您的代碼...好吧,您明白了。然後,應用程序代碼可以根據需要控制流,產生新線程,發送操作系統適當路由的意圖以及利用其他任意類(如類A)。但是,你的活動必須問A,A不能告訴你的活動。這就是說,如果你的活動實例化了A,並且A在實例方法中創建了名爲dStruct的List,那麼你可以這樣做。

public partial Class A { 
    public List createDStruct(){ 
     List dStruct = new List() 
     //Do stuff to dStruct 
     return dStruct 
    } 

public partial Class MyActivity { 
    public List retrieveDstruct(){ 
     A a = new A() 
     return a.createDStruct() 
    } 
} 

相關問題