0

目前我正在尝试定期收集位置更新,例如每 10 个样本。一旦我使用异步任务将它们传递给服务器,我正在使用数组列表来收集它们并清除主 UI 线程中的数组列表。在异步任务中,我正在使用来自主 UI 的数组列表加载数组列表。

问题是,它正在清除异步任务中的数组列表,即使它位于单独的变量中。如何使活动保持同步。我是否需要让主要活动休眠,直到异步任务完成。我不确定变量。有人可以解释如何做到这一点吗?

MainMapActivity(X){
  locationupdate for every 1 min{
  arraylist a;//this collects all location updates 10 samples each time
  call asynctask b;
  clear a;
}
asynctask b{
  arraylist c = getall from  a;
  db= insert(c);//save a into database;
}

清除主 UI 中的 a 会清除变量 c。我怎样才能防止这种情况?变量 c 只有在保存了其中的所有数据后才应清除。

4

1 回答 1

0

如果我得到你想说的是,那么是的,我们有办法使用处理程序来解决你的问题。

在你的异步任务中,做这样的事情 -

   private mLocations;
 public MyTask(Handler mResponseHandler, List<Location> mLocations){
        super();
        this.mLocations = mLocations;
        this.mResponseHandler = mResponseHandler;
    }

在 onPostExecute 中,

  onPostExecute(List<Location>){

 @Override
    protected void onPostExecute(Boolean result) {

        super.onPostExecute(result);

        Log.i(TAG, "result = "+result);
        if (mResponseHandler == null) return;

        MyLocationData<Location> resultData = new MyLocationData<Location>();
        if(result != null && result){
            resultData.requestSuccessful = true;
            resultData.responseErrorCode = 0;
        }else{
            resultData.requestSuccessful = false;
            resultData.responseErrorCode = errorCode;  //set this when result is null
        }

        android.os.Message m = android.os.Message.obtain();
        m.obj = resultData;
        mResponseHandler.sendMessage(m);
    }
}

MyLocationData 是一个模型类,我在其中保存所有相关数据。它可以是这样的课程 -

 public class MyLocationData<Type> {

    public Type response;
    public int responseErrorCode;
    public boolean requestSuccessful;
}

现在,在您的活动中,您可以获得这些数据,例如,

private Handler mExportHandler = new Handler(){ 

        public void handleMessage(android.os.Message msg) {
                MyLocationData<Location> responseData = (MyLocationData<Location>) msg.obj;
                 // your logic for fetching new locations from responseData and using them in your activity   

        };
    };
于 2012-10-29T07:05:17.083 回答