在改造中发送仅包含字符串的JSONArray

时间:2017-12-21 13:25:28

标签: java android arrays json retrofit

所以我正在尝试发出服务器请求,此请求的预期正文如下所示:["1"]

但如果我将字符串发送为"[\"1\"]",则会收到错误

看着尸体,很明显我必须发送JSONArray,我尝试使用以下代码实现此目的:

JSONArray array = new JSONArray();
array.put("1");

但我在stetho的身体显示为:

{
    "values":["1"]
}

也许我正在使用错误的课程或其他什么!

编辑:

这是我与

的api通话
OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .addNetworkInterceptor(new StethoInterceptor())
                    .build();

RetrofitService retrofitService2 =new Retrofit.Builder()
                    .baseUrl("http://blynk-cloud.com/")
                    .client(okHttpClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
                    .create(RetrofitService.class);

retrofitService2.closeDoor("3bf11f14e6094dd5a8f31f6d6fac8f3d",
                    "[\"1\"]")
                    .enqueue(new Callback<String>() {
                        @Override
                        public void onResponse(Call<String> call, Response<String> response) {
                           {

                            }

                        }

                        @Override
                        public void onFailure(Call<String> call, Throwable t) {

                        }
                    });

closeDoor方法:

@PUT("/{id}/update/D12")
    Call<String> closeDoor(@Path("id") String id, @Body String code);

我的反应: enter image description here

2 个答案:

答案 0 :(得分:1)

如果您想发送请求JSON,例如["1"]

更改为:

    JsonArray array = new JsonArray();
    array.add(new JsonPrimitive("1"));
    //output ["1"]

而不是:

    JSONArray array = new JSONArray();
    array.put("1");

答案 1 :(得分:0)

您收到500错误的原因是您将响应发送为服务器所期望的text\plain application\json

根据建议here,要发送原始JSON,您需要使用RequestBody并传递它而不是String

RequestBody body = new RequestBody.create(MediaType.parse("application/json"),"[\"1\"]");

retrofitService2.closeDoor("3bf11f14e6094dd5a8f31f6d6fac8f3d",body).enqueue(...)

将您的改造方法改为

@PUT("/{id}/update/D12")
Call<String> closeDoor(@Path("id") String id, @Body RequestBody body);