当前位置: 首页 > 知识库问答 >
问题:

如何为跨类Volley方法调用创建正确的Volley监听器

林曦之
2023-03-14

我的目标是用一种非常简洁、模块化的方式从另一个类调用凌空:

            VolleyListener newListener = new VolleyListener();
            VolleySingleton.getsInstance().somePostRequestReturningString(getApplicationContext(), newListener);
            JSONObject data = newListener.getResponse();

但是我很难让侦听器部分工作,以便能够访问来自以下方法的结果数据

newListener.getResponse();
public void somePostRequestReturningString(final Context context,final VolleyListener<String> listener) {

        final String URL = "http://httpbin.org/ip";

        JsonObjectRequest set = new JsonObjectRequest(Request.Method.GET, URL, ((String) null),
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        listener.outPut = response.toString();
                        //Toast.makeText(context, response.toString(), Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("Error.Response", error.toString());
                    }
                }
        );

        mRequestQueue.add(set);
}
public class VolleyListener {
    public static String outPut;

    private static Response.Listener<String> createSuccessListener() {
        return new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                outPut = response;
            }
        };
    }
}

共有1个答案

钱元徽
2023-03-14

对于您的需求,我建议您参考我的以下解决方案,希望它清晰而有帮助:

首先是接口:

public interface VolleyResponseListener {
    void onError(String message);

    void onResponse(Object response);
}

然后在帮助器类(我将其命名为volleyUtils类)中:

public static void makeJsonObjectRequest(Context context, String url, final VolleyResponseListener listener) {
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
                (url, null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    listener.onResponse(response);
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    listener.onError(error.toString());
                }
            }) {

        @Override
        protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
            try {
                String jsonString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
                return Response.success(new JSONObject(jsonString),
                        HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                return Response.error(new ParseError(e));
            } catch (JSONException je) {
                return Response.error(new ParseError(je));
            }
        }
    };

    // Access the RequestQueue through singleton class.
    VolleySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);
}
VolleyUtils.makeJsonObjectRequest(mContext, url, new VolleyResponseListener() {
        @Override
        public void onError(String message) {

        }

        @Override
        public void onResponse(Object response) {

        }
    });

Android/Java:如何在方法中延迟返回

 类似资料:
  • Volley 是一个 Java 网络队列,支持队列请求和优先级。Volley 在加载图片上并不是特别高效,因为它会将所有收到的数据都拷贝到字节数组中。尽管 Volley 试图重用这些字节数组,它对于中等或大图的回收复用率相对比较低。这样的结果是,Volley 用于 Glide 一起用于加载图片时,可能导致大量的内存抖动。当然,如果一个应用已经用了 Volley ,它仍然还是一个比较合适的选择,因为

  • 问题内容: 我想用教程(源代码)解析这个json(我的)。 我的代码是: 这段代码来自androidhive,但我不知道如何解析json(my)。 那么,如何解析json? 问题答案: 试试这个:

  • 我正在考虑在我的下一个项目中实现Android Volley库(关于Volley的Google IO演示)。 然而,我还没有找到任何用于该库的严肃API。 我如何上传文件、发送/获取请求,以及使用Volley将Gson解析器添加为解析器? 源代码

  • 问题内容: 如何从排球plz帮助发布此请求 js引用了我的jsson对象……我使我的jsson像这样..... 但是它没有响应值请怎么做 问题答案: 首先你的json数据: 然后您的json请求: 注意 标题 如果您想在localhost中进行测试,请使用以下代码并设置您的url以连接您的localhost服务器和ip地址:下面的代码将您的所有请求都放在一个文本文件中,我尝试了一下,即可

  • 问题内容: 我试图通过以下方式获取JSON对象: 以下是处理所有HTTP请求的一般方法 处理JSON结果的方法如下: 我想问一下如何以异步方式取回JSONObject(第一个代码段)。 所有请求均使用Volley库处理。 非常感谢您的任何建议。 问题答案: 供您评论 我认为异步是由Volley自动提供的。所以我需要知道如何将JSON数据放入第一个片段中 IMO,而不是您的第一个片段,您可以尝试以下