如何使用异步任务定期保存位置更新?

时间:2012-10-29 06:38:07

标签: android

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

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

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中的所有数据后才能清除它。

1 个答案:

答案 0 :(得分: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   

        };
    };