Android:如何将对象从简单类传递给Activity

时间:2012-03-20 20:48:29

标签: android parsing class object android-activity

我有以下问题。 我有一个名为“A”的类,我在其中创建一个列表“List dStruct”。 我在“A”类中修改了这个对象,我想把它传递给一个Activity供进一步使用。

“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;

}

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 

 }

2 个答案:

答案 0 :(得分:2)

从Android角度来看,任意Java对象并不是真正的第一类构造。

“主”线程通过活动/广播接收器/服务/内容提供商/视图输入您的代码......好吧,您明白了。然后,应用程序代码可以按照自己的意愿控制流,生成新线程,为操作系统发送意图以适当地路由,以及利用其他任意类(如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()
    }
}

答案 1 :(得分:2)

我使用Handler解决了这个问题。在我的自定义AsyncTask中,我将一个Handler从一个Activity传递给构造函数。在AsyncTask的onPostExecute中,我调用Handler.sendMessage并将任何数据发送回Activity。

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);
    }
}

在Activity

中声明的处理程序
private Handler activityHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            // Do something with msg.obj
    };

从在Handler中传递给ctor的Activity调用AsyncTask(在你的按钮点击事件处理程序中执行此操作)

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