Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析Android截击JSONArray响应_Java_Android_Json_Android Volley - Fatal编程技术网

Java 解析Android截击JSONArray响应

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

我发送了一个带有截击的JSONArray GET请求,它返回指定的JSON数组。这是我的要求:

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);