0
我有这种方法称为“invokeWS”。我想要做的就是更新我的应用程序中使用的ArrayAdapter adapter2,它使用listdata ArrayList从JSON文件获取数据。我尝试了不同的事情。AsyncHttpClient LoopJ和保留数据从onSuccess方法
- onSuccess无效,所以我不能返回任何东西到主程序。我很乐意尝试,JSON被解析,我可以在控制台中看到我想要的字符串,但是一旦离开onSuccess,我就会得到一个空的Arraylist。所以当返回列表数据是空的。
- 只好也宣布了listData“最终”,否则“从内部类访问”错误似乎哪里的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);
感谢您的阅读!
谢谢,但我不得不问你的建议虽然解决方案! –
没关系,修复它! 感谢您的建议!我还必须再次初始化sp1,否则它会超出范围,但是这是个好主意! Spinner sp1 =(Spinner)findViewById(R.id.spinner2); –
不错!不客气=) – Diekrul