Android: как передать объект из простого класса в Activity - PullRequest
0 голосов
/ 21 марта 2012

У меня следующая проблема.У меня есть класс с именем «A», в котором я создаю список «List dStruct».Я изменяю этот объект в классе «A» и хочу передать его в Activity для дальнейшего использования.

Также класс «A» расширяет AsyncTask.

В этом случае какЯ передаю объект в Activity?

Вот код активности: </p> <p>List dStruct; //the object I want to access</p> <p>btnPlanTrip.setOnClickListener(new OnClickListener() {</p> <pre><code> tripReq = new TripRequest(MainActivity.this); tripReq.execute(request); dStruct=tripReq.dStruct; String str= dStruct.get(0).name; }

Вот код для класса "A"

public class TripRequest extends AsyncTask {</p> <p>List dStruct;</p> <pre><code> public TripRequest(MainActivity activity) { this.activity = activity; dStruct=new ArrayList <DirectionsStruct>(); progressDialog = new ProgressDialog(activity);

}

защищенный void onPostExecute (длинный результат) {

   code for dStruct 

 }

}

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Я решил эту проблему, используя Обработчик с.В своем пользовательском AsyncTask я передаю обработчик из Activity в конструктор.В AsyncTask onPostExecute я вызываю Handler.sendMessage, и он отправляет все данные обратно в Activity.

AsyncTask Code (ваш класс "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
    };

Вызов AsyncTask из Activity, передаваемый из обработчика в ctor (сделайте это в обработчике событий нажатия кнопки)

MyAsyncTask async = new MyAsyncTask(activityHandler);
async.execute(...);
2 голосов
/ 21 марта 2012

Произвольные объекты Java на самом деле не являются первоклассными конструкциями с точки зрения Android.

«Основной» поток вводит ваш код через Activity / Broadcast Receiver / Service / Content Provider / View ..Ну, вы поняли.Затем код приложения может управлять потоком по своему усмотрению, создавая новые потоки, посылая намерения для ОС соответствующим образом маршрутизировать и используя другие произвольные классы (например, ваш класс A).Тем не менее, ваша деятельность должна спрашивать A, A не может определить вашу активность.

При этом, если ваша деятельность создает A, а A создает список с именем dStruct в методе экземпляра, вы можете сделать что-то вродеэто.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...