Java 解析Android截击JSONArray响应
我发送了一个带有截击的JSONArray GET请求,它返回指定的JSON数组。这是我的要求:Java 解析Android截击JSONArray响应,java,android,json,android-volley,Java,Android,Json,Android Volley,我发送了一个带有截击的JSONArray GET请求,它返回指定的JSON数组。这是我的要求: JsonArrayRequest getRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONAr
JsonArrayRequest getRequest = new JsonArrayRequest(url,
new Response.Listener<JSONArray>()
{
@Override public void onResponse(JSONArray response) {
Log.d("Response", response.toString());
}
},
new Response.ErrorListener()
{
@Override public void onErrorResponse(VolleyError error) {
Log.d("Error.Response", error.toString());
}
}
);
VolleySingleton.getInstance(this).addToRequestQueue(getRequest); //Call to get dashboard feed
}
JsonArrayRequest getRequest=新的JsonArrayRequest(url,
新的Response.Listener()
{
@重写公共void onResponse(JSONArray响应){
Log.d(“Response”,Response.toString());
}
},
新的Response.ErrorListener()
{
@覆盖公共无效onErrorResponse(截击错误){
Log.d(“Error.Response”,Error.toString());
}
}
);
getInstance(this).addToRequestQueue(getRequest)//调用以获取仪表板提要
}
如您所见,我目前正在注销响应。我想解析数组并在列表视图中显示结果。这方面的文档不是很好,而且我对Android开发非常了解。从Volley解析JSON数组并在列表视图中显示结果的正确方法是什么?我应该使用parseNetworkResponse
,但不确定如何实现。您可以使用project在java和android应用程序中使用json,它非常简单
此链接是使用gson的示例链接
您可以在android框架中使用本机的
JSONParsor
,您的需求相对较少,JSON
非常简单。是教程的链接
但是,如果您使用的是复杂的JSON
对象,请使用如下库
- GSON
- 杰克逊
我发现GSON更容易使用,也更有效。您可以从了解更多信息,我建议您坚持使用GSON库进行JSON解析。下面是带有嵌入式JSON处理的截击请求的外观:
import java.io.UnsupportedEncodingException;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
/**
* Volley GET request which parses JSON server response into Java object.
*/
public class GsonRequest<T> extends Request<T> {
/** JSON parsing engine */
protected final Gson gson;
/** class of type of response */
protected final Class<T> clazz;
/** result listener */
private final Listener<T> listener;
public GsonRequest(String url, Class<T> clazz, Listener<T> listener,
ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.listener = listener;
this.gson = new Gson();
}
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data, HttpHeaderParser.parseCharset(response.headers));
return Response.success(
gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}
我们可以这样调用上述方法:
GsonRequest<Person[]> getPersons =
new GsonRequest<Person[]>("http://example.com/api/persons/", Person[].class,
new Listener<Person[]>() {
@Override
public void onResponse(Person[] response) {
List<Person> persons = Arrays.asList(response);
// TODO deal with persons
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO deal with error
}
});
VolleyQueue.get().add(getPersons);
GsonRequest getPersons=
新的GsonRequest(“http://example.com/api/persons/“,人[]。类别,
新侦听器(){
@凌驾
公共响应(人员[]响应){
List persons=Arrays.asList(响应);
//待办事项
}
},新的ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//如何处理错误
}
});
截击队列.get().add(getPersons);
最后,作为响应侦听器,我们得到了一个Person数组,可以将其转换为list并提供给ListView的适配器。谢谢,我可能会使用GSON。您能详细说明一下如何实际解析数组吗?您引用的示例使用AsyncTask,而不是凌空截击,因此有点混乱。我发现有很多关于解析JSONObject的资源,但对于我正在处理的数组来说没有那么多。将响应字符串从
volley
传递到gson
最后一个代码片段去了哪里?截击队列是在哪里定义的?我们可以在这里使用类型令牌方法吗?很好的示例。很有帮助@Greg尝试类似以下截击助手:getInstance(getActivity()).addToRequestQueue(getPersons);创建一个截击助手类来添加请求队列。如果您需要样品,我可以提供!。
GsonRequest<Person[]> getPersons =
new GsonRequest<Person[]>("http://example.com/api/persons/", Person[].class,
new Listener<Person[]>() {
@Override
public void onResponse(Person[] response) {
List<Person> persons = Arrays.asList(response);
// TODO deal with persons
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO deal with error
}
});
VolleyQueue.get().add(getPersons);