Хорошо, после нескольких часов попыток выяснить, что я делаю не так, кажется, что «JsonObjectRequest» - это не то, что я искал. Хотя, согласно https://developer.android.com/training/volley/request,
JsonObjectRequest - запрос на получение тела ответа JSONObject по заданному URL-адресу, позволяющий передавать необязательный JSONObject в качестве части тела запроса.
Мои первоначальные мысли: я отправляю (POST) JSONObject в теле () и получаю ответ JSONObject с сервера, так почему бы не пойти по этому пути, верно? Неправильно. Я пытался передать JSONObject в качестве аргумента, а также пытался переопределить метод body (), но я продолжал получать нулевой ответ в Android, пока Postman работал без проблем.
Мое решение: StringRequest. Я также вручную создал строку тела вместо создания JSONObject:
public void encryptRequest(String input) {
Encrypt sodium = new Encrypt();
final byte[] nonce = sodium.randomNonce();
final Key key = sodium.randomKey();
final String encryptedText = sodium.encrypt(input, nonce, key);
final String jSonString = "{\"method\":\"decryptTest2\", \"params\":{\"cipher\":\"" +
encryptedText + "\", \"nonce\":\"" + sodium.convertNonce(nonce) +
"\", \"key\":\"" + sodium.convertKey(key) + "\"}}";
StringRequest stringRequest = new StringRequest(Request.Method.POST, sodium.getURL(),
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
if (jsonObject.names().get(0).equals("success")) {
System.out.println("Decrypted Text: " + jsonObject.getJSONObject("success").getString("decryptedText"));
}
else {
System.out.println("Error decrypting: " + jsonObject.getJSONObject("error").getString("decryptedText"));
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("LOG_VOLLEY", e.getMessage());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("LOG_VOLLEY", error.getMessage());
}
}) {
@Override
public byte[] getBody() throws AuthFailureError {
try {
return jSonString == null ? null : jSonString.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", jSonString, "utf-8");
return null;
}
}
@Override
public String getBodyContentType() {
return "application/json";
}
};
stringRequest.setRetryPolicy(new DefaultRetryPolicy(5000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(stringRequest);
}
После некоторых исследований кажется, что я не единственный, у кого есть эта проблема. В любом случае, я решил опубликовать свое решение на тот случай, если кто-то в будущем столкнется с той же проблемой.