AsyncHttpClient LoopJ并保留来自onSuccess方法的数据



我有一个名为"invokeWS"的方法。我只想用从JSON文件获取数据的listdata ArrayList更新我在应用程序中使用的ArrayAdapter适配器2。我尝试了不同的东西。

  • onSuccess是无效的,所以我不能向主程序返回任何内容。我很乐意尝试,JSON被解析,我可以在控制台中看到我想要的字符串,但一旦我离开onSuccess,我就会得到一个空的Arraylist。因此,当返回listdata时,它是空的
  • 还必须声明listdata为"final",否则"从内部类访问"的错误将出现在OnSuccess上listdata所在的位置
  • 还尝试在onSuccess内部更新ArrayAdapter adapter2,但没有成功,因为据说它超出了范围
  • 我本来打算实现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();
    

    这是在main类中编写的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);
    

感谢阅读!

您可以做的事情是,在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);
}

相关内容

  • 没有找到相关文章

最新更新