別のスレッドから更新したいマップがあります。asynctask を拡張するクラスから UI を更新しようとすると、いくつかの問題が発生します。そして、コードをメインスレッドのハンドラーに移動すると、NetworkOnMainThreadException
. 以下は私の非同期タスクです。それを機能させるために変更する方法はありますか?
@Override
protected Integer doInBackground(Void... params) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://83.xx.xx:8080/android/service.php");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("action", "getusers"));
nameValuePairs.add(new BasicNameValuePair("interval", Integer.toString(interval)));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
String jsonString = EntityUtils.toString(response.getEntity());
Gson gson = new GsonBuilder().create();
Type listType = new TypeToken<ArrayList<User>>() {}.getType();
ArrayList<User> userList = gson.fromJson(jsonString, listType);
((GoogleMapsActivity) activity).removeOverlayItems();
for(User user : userList ){
((GoogleMapsActivity) activity).addOverlayItem(Double.parseDouble(user.last_lat), Double.parseDouble(user.last_lng), user.bluetooth_name, "test desc");
}
return 1;
} catch (Exception e) {
e.printStackTrace();
}
return null;