使用Volley Post请求(包含多个部分)以阿拉伯语言发送发布数据

时间:2018-09-24 13:02:00

标签: java android post android-volley

首先,我为我的英语不好而感到抱歉,实际上我陷入了困境。我想在数据库中发送阿拉伯文本。当我用邮递员请求发送API时,它已经可以工作了。但是当我用Volley请求发送它时,它没有发送正确的文本,而是转换成某种字符,而不是实际的字符串。

用于发送请求的示例代码

VolleyPostRequest volleyMultipartRequest = new VolleyPostRequest(Request.Method.POST, URL,
          response -> {

          },
          error -> {
          }) {
         @Override
         protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            params.put(AppConstants.API_DATA, data);
            params.put("key", POST_API_KEY);
            return params;
         }
      };
      volleyMultipartRequest.setRetryPolicy(new DefaultRetryPolicy(50000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
      AppController.getInstance().getRequestQueue().getCache().clear();
      AppController.getInstance().getRequestQueue().cancelAll(volleyMultipartRequest);
      AppController.getInstance().addToRequestQueue(volleyMultipartRequest);

我传递给服务器“ {\“错误\”的字符串:\“العنوانبالعربية\”}“

存储在数据库'D9FH'F('D91(J)

我在数据的getParams()中传递直接字符串。

我也尝试使用URL URLEncoder.encode(jsonError,“ UTF-8”),但它给了我500错误。

3 个答案:

答案 0 :(得分:0)

您需要设置一个内容类型标题:

@Override
public Map<String, String> getHeaders()
    Map<String, String> headers = new HashMap<String, String>();
    headers.put("Content-Type", "application/json; charset=utf-8");
    return headers;
}

和/或设置身体内容的内容类型:

@Override
public String getBodyContentType() {
    return "application/json; charset=utf-8";
}

结合getParams()设置标题已经足够了。

答案 1 :(得分:0)

感谢您提供宝贵的反馈意见,但我通过使用URL编码器解决了该问题

示例代码

private void encodeString(String input){
     try {
         return URLEncoder.encode(input, "utf-8");
      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      }
}

答案 2 :(得分:0)

我解决了同样的问题, 它很简单,而且有效:

1)编码字符串(在Post请求中):

margin-top

2)再次解码(从API获取数据后):

75px

注意: 编码后,数据将如下所示:

private void encode_str(String str){
 try {
     return URLEncoder.encode(str, "utf-8");
  } catch (UnsupportedEncodingException e) {
     e.printStackTrace();
  }
}

,但是在再次解码后,它将返回。

感谢约翰