2012-03-20 55 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() 
    } 
} 

相关问题