目前我正在尝试定期收集位置更新,例如每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中的所有数据后才能清除它。
答案 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
};
};