我的目标是用一种非常简洁、模块化的方式从另一个类调用凌空:
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;
}
};
}
}
对于您的需求,我建议您参考我的以下解决方案,希望它清晰而有帮助:
首先是接口:
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,而不是您的第一个片段,您可以尝试以下