У меня есть этот метод, называемый «invokeWS». Все, что я хочу сделать, это обновить адаптер ArrayAdapter2, который я использую в своем приложении, с массивом listray ArrayList, который получает данные из файла JSON. Я пробовал разные вещи.AsyncHttpClient LoopJ и сохранение данных из метода onSuccess
- OnSuccess недействителен, поэтому я не могу вернуть ничего в основную программу. Я вхожу в попытку, JSON анализируется, и я вижу строки, которые я хочу в консоли, но как только я выхожу из onSuccess, я получаю пустой Arraylist. Поэтому при возврате listdata пуст.
- бы также объявить ListData «окончательный», в противном случае будут появляться ошибки «доступ из внутреннего класса», где ListData на OnSuccess
- Также Пытался сделать ArrayAdapter adapter2 для обновления внутри OnSuccess, но не работает, потому что говорится, что он выходит за рамки.
Я собирался реализовать метод onFinish, но его даже вызвали до того, как JSON был разобран по странной причине.
public static ArrayList<String> invokeWS() { AsyncHttpClient client = new AsyncHttpClient(); final ArrayList<String> listdata = new ArrayList<String>(); client.get("http://xxx.xxx.xxx.xxx:8085/CompanyJersWS/company/showcompany", new JsonHttpResponseHandler() { //address to be specified each time, using external IP address @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { System.out.println("Inside Success invokeWS"); try { JSONArray json = response.getJSONArray("Companies"); System.out.println("JSON is parsed!" +json.toString() + "Length is " + json.length()); System.out.println("First value is " + json.getString(0)); int i; for (i=0;i<json.length();i++) listdata.add(json.getString(i)); System.out.println("Listdata contains" +listdata); } catch (Exception e) { System.out.println("FAILED invokeWS"); e.printStackTrace(); } } } ); System.out.println("Listdata out of scope contains" +listdata); return listdata; }
Вот как я пытаюсь вызвать invokeWS() из моего основного класса;
ArrayList<String> tempval = invokeWS();
и это adapter2 написано в главном классе, который я хочу иметь ListData из JSon файла в качестве содержимого.
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, tempval.toArray(new String[tempval.size()])); sp1.setAdapter(adapter2);
Спасибо за чтение!
Спасибо, но у меня возникли проблемы с решением, которое вы предложили! –
Nevermind, исправил это! Спасибо за предложение! Мне также пришлось инициализировать sp1 еще раз, потому что в противном случае это было вне сферы действия, но хорошая идея! Spinner sp1 = (Spinner) findViewById (R.id.spinner2); –
Ницца !, добро пожаловать =) – Diekrul