android - 带有 JSON 正文的 StringRequest

标签 android json android-volley

我正在尝试使用 Volley 发送请求,但我不知道如何让它工作。

我需要发送一个以 JSON 编码数据作为正文的 POST 请求,但在尝试了数小时不同的方法后,我仍然无法让它工作。

这是我当前的请求代码:

User user = User.getUser(context);
String account = user.getUserAccount();
String degreeCode = user.getDegreeCode();

final JSONObject body = new JSONObject();
try {
    body.put(NEWS_KEY, 0);
    body.put(NEWS_DEGREE, degreeCode);
    body.put(NEWS_COORDINATION, 0);
    body.put(NEWS_DIVISION, 0);
    body.put(NEWS_ACCOUNT, account);
} catch (JSONException e) {
    e.printStackTrace();
}

StringRequest request = new StringRequest(Request.Method.POST, GET_NEWS, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(String response) {
        Log.i(TAG, response);
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e(TAG, "Error: " + getMessage(error, context));
        Toast.makeText(context, getMessage(error, context), Toast.LENGTH_SHORT).show();
    }
}) {
    @Override
    public byte[] getBody() throws AuthFailureError {
        return body.toString().getBytes();
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type","application/json");
        return headers;
    }
};
queue.add(request);

但是这段代码总是返回“Bad request error”

我尝试过的一些事情:

  • 覆盖 getParams() 方法而不是 getBody()。 (没用)
  • 发送一个 JSONObjectRequest,主体在构造函数中。这一个有效,但因为我的网络服务返回一个 String 值,所以我总是得到一个 ParseError。这就是我使用 StringRequest 的原因。

非常感谢任何帮助。

最佳答案

正如在 njzk2's comment 中提到的那样,最简单的方法是改写 getBodyContentType()。覆盖 getHeaders() 也可能有效,但您需要放置所有必要的 header ,而不仅仅是 Content-Type,因为您基本上覆盖了原始方法设置的 header 。

您的代码应如下所示:

StringRequest request = new StringRequest(...) {
    @Override
    public byte[] getBody() throws AuthFailureError {
        return body.toString().getBytes();
    }

    @Override
    public String getBodyContentType() {
        return "application/json";
    }
};

关于android - 带有 JSON 正文的 StringRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27451094/

相关文章:

android - BitmapFactory.decodeResource 不工作 API > 19

javascript - 使用 AJAX、jQuery 和 PHP 接收响应时出现问题

arrays - Gson 我无法反序列化包含纬度和经度的数组

Android Edit text onclicklistener 在第一次点击时不起作用

kotlin - 如何在这里使用 lambda 表达式?

android - Gson 发布方法

java - 有没有办法在android编程中制作两种数据类型的数组

Android:尝试将图像保存到 SD 卡时应用程序退出

android - 如何在我的 Android 应用程序中使 View 填充其父级的整个宽度?

javascript - 结果数据的意义