【问题标题】:Retrofit @DELETE json改造@DELETE json
【发布时间】:2020-06-02 17:36:08
【问题描述】:

所以我只有 jsut 开始使用 Retrofit 并试图了解它。 我创建了一个@POST:

String suuid = UUID.randomUUID().toString();

    String json = "{\"id\" : \""+suuid+ "\", \"sensorType\" : \"sound\", \"threshold\" : \"50\", \"operator\" : \">\", \"actuator\" : \"1\", \"actuatorAction\" : \"4\"}";
    RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
    api.postTest(requestBody).enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

        }

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

        }
    });

然后我希望能够删除刚刚作为 json 发送的相同数据。我尝试使用:

@DELETE("/TEST")
Call<ResponseBody> deleteTest(@Body RequestBody requestBody);

有了这个,我只是将 api.postTest 更改为 api.deleteTest 并崩溃了应用程序?我不能使用 ID,因为每个 ID 都使用 UUID。服务器将保存多个数据条目。

感谢任何帮助。

ERROR:
E/AndroidRuntime: FATAL EXCEPTION: main
              Process: rsstudio77.omnisciencehome, PID: 15088
              java.lang.RuntimeException: Unable to start activity ComponentInfo{rsstudio77.omnisciencehome/rsstudio77.omnisciencehome.security.securityPreConfig}: java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body.
                  for method Api.deleteTest
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                  at android.app.ActivityThread.-wrap11(Unknown Source:0)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                  at android.os.Handler.dispatchMessage(Handler.java:106)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6494)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
               Caused by: java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body.
                  for method Api.deleteTest
                  at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752)
                  at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:743)
                  at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:211)
                  at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
                  at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
                  at java.lang.reflect.Proxy.invoke(Proxy.java:913)
                  at $Proxy0.deleteTest(Unknown Source)
                  at rsstudio77.omnisciencehome.security.securityPreConfig.onCreate(securityPreConfig.java:58)
                  at android.app.Activity.performCreate(Activity.java:6999)
                  at android.app.Activity.performCreate(Activity.java:6990)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)

【问题讨论】:

  • 你能把logcat贴在这里吗?
  • 服务器端的实现是什么?回复是什么?如果您的应用程序崩溃,您需要发布堆栈跟踪...
  • 我发布了错误
  • 只有post方法可以有@Body。
  • @gmetax 我将如何删除 POST 数据?

标签: android json retrofit retrofit2


【解决方案1】:

试试这个:

@HTTP(method = "DELETE", path = "/TEST", hasBody = true)
Call<ResponseBody> deleteTest(@Body RequestBody requestBody);

【讨论】:

猜你喜欢
  • 2020-01-31
  • 2019-03-14
  • 2016-12-19
  • 1970-01-01
  • 2015-09-10
  • 2015-11-16
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多