【发布时间】:2017-02-12 19:33:33
【问题描述】:
我有这个方法叫做“invokeWS”。我要做的就是使用从 JSON 文件获取数据的 listdata ArrayList 更新我在应用程序中使用的 ArrayAdapter 适配器2。我尝试了不同的方法。
- onSuccess 无效,因此我无法将任何内容返回到主程序。我很高兴进入尝试,JSON 被解析,我可以在控制台中看到我想要的字符串,但是一旦我退出 onSuccess,我就会得到一个空的 Arraylist。所以返回时listdata为空。
- 还必须将 listdata 声明为“final”,否则无论 listdata 在 OnSuccess 上的任何位置,都会出现“从内部类访问”的错误
- 还尝试让 ArrayAdapter 适配器 2 在 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,我想将json文件中的listdata作为内容。
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, tempval.toArray(new String[tempval.size()])); sp1.setAdapter(adapter2);
感谢阅读!
【问题讨论】:
标签: android json asynchronous loopj asynchttpclient