我有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;
}
};
这是json的回复:
[
{
"id":"442",
"fullname":"xyz(18 yr)",
"image":"\/2017-02-0823:49:521486619389674.jpg",
"location":"lkn","Description":null
},
{
"id":"443",
"fullname":"abc(28 yr)",
"image":"\/2017-02-0823:51:381486619493934.jpg",
"location":"md","Description":null
},
{
"id":"444",
"fullname":"Arya(25 yr)",
"image":"\/2017-02-0823:52:251486619540695.jpg",
"location":"ud","Description":null
}
]
答案 0 :(得分:0)
这可以在请求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;
}
};
上面的是一个如何在post请求中传递body的简单示例。
有时匿名类结构变得非常混乱且不可读因此我建议创建具体类(可能是静态内部)。