我有这个名为“invokeWS”的方法。我想做的就是更新我在app中使用的ArrayAdapter adapter2,它使用listdata ArrayList从JSON文件中获取数据。我尝试了不同的东西。
我打算实现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);
感谢阅读!
答案 0 :(得分:0)
你可以做的是,在onSuccess之后传递你创建的“listdata”,就像函数的参数一样(例如“refreshData”):
@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);
refreshData(listdata);
} catch (Exception e) {
System.out.println("FAILED invokeWS");
e.printStackTrace();
}
}
然后使用该函数使用新列表更新数组:
public void refreshData(ArrayList<String> listdata){
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, listdata);
sp1.setAdapter(adapter2);
}