我有一个android项目......我必须修改一个arraylist,它是在一个内部类的外部类中定义的。我在外部类中创建了一个setter方法,以便我可以从内部类访问它并修改它。但是在执行代码之后,我总是在外部类中将arraylist的大小设置为零。在内部类中修改时,arraylist的大小不为零。
这是我的代码:
public class MapActivity extends Activity implements LocationListener, GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
public ArrayList<SimpleGeofence> mygeo = new ArrayList<SimpleGeofence>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
setupMap();
}
public void setList(ArrayList<SimpleGeofence> list) {
this.mygeo = list;
}
private void setupMap() {
Log.i("size of array", mygeo.size()+"");
}
public static class AsyncTaskParseJson extends AsyncTask<String, String, String> {
public static ArrayList<SimpleGeofence> mygeotemp = new ArrayList<SimpleGeofence>();
@Override
public void onPreExecute() {}
@Override
public String doInBackground(String... arg0) {
try {
//update mygeotemp ArrayList
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String strFromDoInBg) {
MapActivity mappa = new MapACtivity();
mappa.setList(mygeotemp);
}
}
有人能找到我的错吗?或者也许告诉我一个更好的方法来获得外部类中修改过的arraylist?
答案 0 :(得分:1)
您的AsyncTaskParseJson
未绑定到MapActivity
的实例,因为它是static
。您在获得结果时创建new MapACtivity()
并向其提供列表,但这不会影响原始活动。
线程安全方法可能如下所示:
class MapActivity {
private volatile ArrayList<SimpleGeofence> mygeo = new ArrayList<SimpleGeofence>();
/* other methods */
public void setList(ArrayList<SimpleGeofence> list) {
this.mygeo = list;
}
class AsyncTaskParseJson extends AsyncTask<String, String, String> {
/* other methods */
@Override
public void onPostExecute(String strFromDoInBg) {
// Do *not* create a new instance of the activity here
setList(mygeotemp);
}
}
}