Asynctask: передать два или более значения из doInBackground в onPostExecute

У меня есть Asynctask, который извлекает два int vaules, и я хочу передать их onPostExecute, чтобы показать их на представлении.
Вот мой код:

public class QueryServer extends AsyncTask <String, Void, Integer> { protected Integer doInBackground(String... serverAddress) { Log.d("QueryServer", ""+serverAddress[0]); MCQuery mcQuery = new MCQuery("" + serverAddress[0] ,25565); QueryResponse response = mcQuery.basicStat(); int Onlineplayers = response.getOnlinePlayers(); //first vaule int Maxplayers = response.getMaxPlayers(); //second vaule Log.d("MCQuery", "" + Onlineplayers + " OnlinePlayers"); return Onlineplayers; } protected void onPostExecute(Integer Onlineplayers){ TextView onlinePlayersView = (TextView) findViewById(R.id.online_players); onlinePlayersView.setText(""+Onlineplayers+"/"+ Maxplayers); //i need to pass Maxplayers to use it here } 

Заранее спасибо.

Вы можете определить класс Wrapper, который содержит два целых числа:

 public class Wrapper { public int onlinePlayers; public int maxPlayers; } 

И используйте его вместо Integer :

 public class QueryServer extends AsyncTask<String, Void, Wrapper> { protected Wrapper doInBackground(String... serverAddress) { Log.d("QueryServer", ""+serverAddress[0]); MCQuery mcQuery = new MCQuery("" + serverAddress[0] ,25565); QueryResponse response = mcQuery.basicStat(); int onlinePlayers = response.getOnlinePlayers(); //first vaule int maxPlayers = response.getMaxPlayers(); //second vaule Log.d("MCQuery", "" + onlinePlayers + " onlinePlayers"); Wrapper w = new Wrapper(); w.onlinePlayers = onlinePlayers; w.maxPlayers = maxPlayers; return w; } protected void onPostExecute(Wrapper w){ TextView onlinePlayersView = (TextView) findViewById(R.id.online_players); onlinePlayersView.setText(""+w.onlinePlayers+"/"+ w.maxPlayers); //i need to pass Maxplayers to use it here } 
 public class QueryServer extends AsyncTask <String, Void, Integer>{...} 

Замените общий параметр Integer на ArrayList<Integer> или Integer[]

Таким образом, ваш doInBackground() будет выглядеть так:

 protected Integer[] doInBackground(String... serverAddress) { ...do what you need to do... //Then create an array, fill with data, and return. Integer[] arr = new Integer[10]; for(int i=0; i<10; i++) arr[i] = i; //just an example return arr; } 

И в вашем onPostExecute()

 protected void onPostExecute(Integer [] Onlineplayers) { //Do whatever you want with your array } 

Самый простой способ – просто объявить небольшой контейнерный объект с полями, которые вы хотите вернуть, а затем вернуть экземпляр из doInBackground:

 private class QueryResult { int onlinePlayers; int maxPlayers; public QueryResult( int onlinePlayers, int maxPlayers ) { this.onlinePlayers = onlinePlayers; this.maxPlayers = maxPlayers; } } protected QueryResult doInBackground(String... serverAddress) { // ... return new QueryResult( onlinePlayers, maxPlayers ); } 

Вы пытались сделать этих двух ints членов QueryServer ?

onPostExecute() не запускается до тех пор, пока doInBackground() будет завершен, поэтому не должно быть проблем с doInBackground() .

Вообще говоря, замените Integer на ArrayList of Objects . С помощью этого массива вы можете передать любую коллекцию любых типов. Но, очевидно, недостатком является то, что вы должны бросить членов, и вы должны знать все типы …

Intereting Posts
AndEngine GLES2- IndexOutOfBoundsException внутри строки Entity.java: 1402 Вызвать методы или функции класса C ++ из Java на андроид без повторного создания класса / переменной при каждом вызове Как получить цвет акцента программным путем? Создание наблюдаемого без использования Observable.create Push .apk to / system / app / в HTC HERO Устройство не отображается в DDMS Студия Android предотвращает переформатирование кода на пасте Использование window.print () или альтернативы на устройствах Android Загрузка изображения из списка в следующую активность Почему получение NoSuchFiledException при использовании другого проекта Android в качестве библиотеки? Java Android AsyncTask – Когда AsyncTask перестает работать? Не удается установить APK на моем собственном сервере Apache Не удалось определить зависимости задачи: app: crashlyticsStoreDeobsDebug ', если я включу proguard Анимация на панели инструментов Android AppCompat-v21 Timertask или обработчик