У меня есть карта, которую я хочу обновить из отдельного потока. У меня возникают некоторые проблемы, когда я пытаюсь обновить пользовательский интерфейс моего класса, который расширяет асинтез. И когда я перемещаю код в обработчик в основном потоке, я получаю NetworkOnMainThreadException
. Ниже моя асинтеза. Есть ли способ изменить его, чтобы заставить его работать?network + ui updates, asynctask vs handler
@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;
Хорошо, спасибо за ответ. Не могли бы вы показать мне пример того, как извлекать данные из asynctask в основной поток? – Johan
Абсолютно. Я сейчас обновлю свой комментарий. – WindyB
Большое спасибо. Что произойдет, если я просто передаю свой список пользователей как возвращаемое значение и использую 'task.execute.get()' в основном потоке, а затем обновить ui в том же потоке? Плохая идея? :) – Johan