将变量从Activity传递给AsynTask

时间:2015-05-06 02:30:32

标签: java android android-asynctask location

我有一个带导航抽屉的应用程序和一些片段。

在我的MainActivity中,我得到了实际的lat&设备的长位置。

在抽屉里的第一个片段中,我在Web服务器的数据库中加载了一些AsyncTask

对于这个要求,我需要我的Lat& MainActivity中的长变量。

但是如何从我的AsyncTask调用MainActivity中的getLag()方法或获取我的2个变量?

我需要在doInBackround()中调用的Methode updateJSONdata中的变量

public class LoadEvents extends AsyncTask<Void, Void, Boolean>{

        Activity activity;
        ListFragment LF;
        String TAG;

        public LoadEvents(Activity A, ListFragment lf, String TAG) {

            this.TAG = TAG;
            this.LF = lf;
            this.activity = A;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();


            MySwipeRefreshLayout srl = (MySwipeRefreshLayout) LF.getView().findViewById(R.id.srl);

            if(srl!=null){
                srl.setRefreshing(true);
            }

        }

        @Override
        protected Boolean doInBackground(Void... arg0) {

            updateJSONdata(TAG, activity);




            return null;

        }

2 个答案:

答案 0 :(得分:0)

片段onAttach()

MainActivity mainActivity;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mainActivity = (MainActivity) activity;             
}

在片段中调用这样的Activity方法

if (mainActivity != null)
    latLng = mainActivity.getLatLng(); //getLatLng() is a method defined in MainActivity

答案 1 :(得分:0)

1 - 从MainActivity调用片段函数

public class LoadEvents extends AsyncTask<Void, LatLng, Boolean>{
 //....
    @Override
        protected Boolean doInBackground(LatLng... arg0) {
            LatLng myLatLng = arg0[0];

            updateJSONdata(TAG, activity);
            return null;

        }
}

Fragment中有一个方法

public void processAsync(LatLng latlng){
    new LoadEvents().execute(LatLng latlng);
}

从MainActivity调用您的方法

myfragment.processAsync(myLatLng);


2 - 将LatLng参数传递给碎片

  • 将您的LatLng参数作为Json string Bundle
  • 传递给您的片段
  • 再次获取LatLng对象
  • 致电processAsync(myLatLng);