在android volley中使用StringRequest时如何处理响应中的对象数组

在android volley中使用StringRequest时如何处理响应中的对象数组,android,arrays,android-volley,android-json,jsonresponse,Android,Arrays,Android Volley,Android Json,Jsonresponse,我有android应用程序。在那个应用程序中,我在服务器上发布了一些字符串数据,并得到了一些响应。 问题是,我在jsonstring中接收响应,但我希望这些数据在json数组中。 尽管在使用JsonArrayRequest时,参数中不允许post方法,但我的web服务无法工作。 所以我坚持使用StringRequest,服务工作正常,但完整的响应作为一个完整的字符串返回。所以我无法显示我的数据 我的列表视图。那么如何解决这个问题呢 这是我的密码: StringRequest stringRequ

我有android应用程序。在那个应用程序中,我在服务器上发布了一些字符串数据,并得到了一些响应。 问题是,我在jsonstring中接收响应,但我希望这些数据在json数组中。 尽管在使用JsonArrayRequest时,参数中不允许post方法,但我的web服务无法工作。 所以我坚持使用StringRequest,服务工作正常,但完整的响应作为一个完整的字符串返回。所以我无法显示我的数据 我的列表视图。那么如何解决这个问题呢

这是我的密码:

StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Toast.makeText(NewSearchPeople.this, response, Toast.LENGTH_LONG).show();

//                        search1();
                        try {
                            JSONArray jsonArray = new JSONArray(response);

                            for(int i=0;i<jsonArray.length();i++){
                                JSONObject obj = jsonArray.getJSONObject(i);

                                Movie movie = new Movie();
                                movie.setTitle(obj.getString("fullname"));
                                movie.setThumbnailUrl(obj.getString("image"));
                                movie.setRating(obj.getString("location"));
                                movie.setGenre(obj.getString("Description"));

                                movie.setYear(obj.getInt("id"));

                                  movieList.add(movie);
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }


                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(NewSearchPeople.this, error.toString(), Toast.LENGTH_LONG).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("fullname", "pooja");

                return params;
            }

        };

这可以在请求
StringReq
JSONArrayReq
中解决

但更好的方法是使用
JSONArrayRequest
修复此问题,并传递
post
参数,您可以根据类型使用
getBody()
getParams()
方法

JsonArrayRequest stringRequest = new JsonArrayRequest( METHOD_TYPE, url,null,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                return headers == null ? super.getHeaders() : headers;
            }

            @Override
            public byte[] getBody(){
                return BODY.toString().getBytes();
            }
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("fullname", "pooja");
                return params;
            }
        };
JsonArrayRequest-stringRequest=newjsonarrayrequest(方法类型,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
返回标头==null?super.getHeaders():标头;
}
@凌驾
公共字节[]getBody(){
返回BODY.toString().getBytes();
}
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“全名”、“pooja”);
返回参数;
}
};
上面是如何在post请求中传递正文的简单示例

有时匿名类结构变得非常混乱和不可读,因此我建议创建具体的类(可能是静态内部的)


这可以在请求
StringReq
JSONArrayReq
中解决

但更好的方法是使用
JSONArrayRequest
修复此问题,并传递
post
参数,您可以根据类型使用
getBody()
getParams()
方法

JsonArrayRequest stringRequest = new JsonArrayRequest( METHOD_TYPE, url,null,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                return headers == null ? super.getHeaders() : headers;
            }

            @Override
            public byte[] getBody(){
                return BODY.toString().getBytes();
            }
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("fullname", "pooja");
                return params;
            }
        };
JsonArrayRequest-stringRequest=newjsonarrayrequest(方法类型,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
返回标头==null?super.getHeaders():标头;
}
@凌驾
公共字节[]getBody(){
返回BODY.toString().getBytes();
}
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“全名”、“pooja”);
返回参数;
}
};
上面是如何在post请求中传递正文的简单示例

有时匿名类结构变得非常混乱和不可读,因此我建议创建具体的类(可能是静态内部的)


可能重复的请检查
JSONArray
是否为空。然后开始解析。您的代码看起来很好。请告诉我您面临的问题是什么?可能重复的请检查
JSONArray
是否为空。然后开始解析。您的代码看起来很好。请告诉我你面临什么问题?