如何从Volley的onResponse函数返回值?

Wubin Ouyang :
public class getString  {
String tag_string_req = "string_raq";
String url = "http://10.0.2.2/eat/locations/index.json";
String result="";

public String get_String() {
    StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            result=response;
            System.out.println(response);
            ;

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            System.out.println(volleyError.getMessage());
        }
    });
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
    return result;
}}

我将建立一个getString对象,并在其他字段中调用get_String。但是似乎很难从onResponse中获得结果。我知道它不能以这种当前方式工作。谁能帮我解决这个问题?

wblaschko:

您想像这样使用回调接口:

public void getString(final VolleyCallback callback) {
    StringRequest strReq = new StringRequest(Request.Method.GET, url, new     Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            ...  // (optionally) some manipulation of the response 
            callback.onSuccess(response);
        }
    }...
}}

回调定义为

public interface VolleyCallback{
    void onSuccess(String result);
}

活动内的示例代码:

public void onResume(){
    super.onResume();

    getString(new VolleyCallback(){
         @Override
         public void onSuccess(String result){
             ... //do stuff here
         }
    });
}

您也可以VolleyCallback更稳健,使用泛型类型,如果你想要做的处理,或添加start()failed(Exception e)complete(),等方法,做一些更细粒度的状态检查。

请记住,这是一个异步调用,因此在返回结果时(在中success(),您将必须更新视图等

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章