Java 使用车身删除仍不适用于改装

Java 使用车身删除仍不适用于改装,java,android,android-studio,retrofit,Java,Android,Android Studio,Retrofit,我已经尽力了,但还是不行。我已经将okhttp 2.0和okhttp urlconnection 2.0与改型1.9结合使用。删除主体仍然不起作用,我已经检查了之前发布的所有问题,但我仍然找不到答案。我做错什么了吗 这就是我的界面的样子: @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @RestMethod(value = "DELETE", hasBody = true) @interface MY_DELETE

我已经尽力了,但还是不行。我已经将okhttp 2.0和okhttp urlconnection 2.0与改型1.9结合使用。删除主体仍然不起作用,我已经检查了之前发布的所有问题,但我仍然找不到答案。我做错什么了吗

这就是我的界面的样子:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@RestMethod(value = "DELETE", hasBody = true)
@interface MY_DELETE {
    String value();
}

public interface WebServiceMethods {

@FormUrlEncoded
@Headers("Content-Type: application/json")
@MY_DELETE("/DeleteLoggedHours")
void deleteLoggedHour(@Body ProjectTask projectTask, Callback<SuccessSubmissionChecker> successSubmissionCheckerCallback);}
这就是我调用该方法的地方:

public void deleteLoggedHour(ProjectTask projectTask, final MainFragment.DeleteCheckerCallback deleteCallback) {

     WebServiceMethods.deleteLoggedHour(projectTask, new Callback<SuccessSubmissionChecker>() {
         @Override
         public void success(SuccessSubmissionChecker submissionChecker, Response response) {
             Log.e(LOG_TAG, "deleteLoggedHour success");
             Log.e(LOG_TAG, " successSubmissionChecker : " + submissionChecker.isSuccessful());
             deleteCallback.onDeleteSuccess();
         }

         @Override
         public void failure(RetrofitError error) {
             Log.e(LOG_TAG, "deleteLoggedHour failure");
             Log.e(LOG_TAG, " Error : ", error);
             deleteCallback.onDeleteFailure();
         }
     });
}

我做错什么了吗?

您可能会认为
OkHttp
Reformation
不支持在
DELETE
请求中发送正文

这是可以的,因为发送带有删除请求的正文是没有意义的。也没有明确禁止或劝阻。看这个问题:

删除请求上的主体没有定义的语义。请注意
在删除请求中发送正文可能会导致某些现有的
实现拒绝请求


@FormUrlEncoded
不能有
@Body
。要么删除
@FormUrlEncoded
,要么将参数定义为
@Query
(测试和异常在这里:)明白了,谢谢。我用过它,它很管用!可能谁来这里,他们可以检查这个答案。
public void deleteLoggedHour(ProjectTask projectTask, final MainFragment.DeleteCheckerCallback deleteCallback) {

     WebServiceMethods.deleteLoggedHour(projectTask, new Callback<SuccessSubmissionChecker>() {
         @Override
         public void success(SuccessSubmissionChecker submissionChecker, Response response) {
             Log.e(LOG_TAG, "deleteLoggedHour success");
             Log.e(LOG_TAG, " successSubmissionChecker : " + submissionChecker.isSuccessful());
             deleteCallback.onDeleteSuccess();
         }

         @Override
         public void failure(RetrofitError error) {
             Log.e(LOG_TAG, "deleteLoggedHour failure");
             Log.e(LOG_TAG, " Error : ", error);
             deleteCallback.onDeleteFailure();
         }
     });
}
retrofit.RetrofitError: TimeTrackerWebServiceMethods.deleteLoggedHour: @Body parameters cannot be used with form or multi-part encoding. (parameter #1)
        at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:400)
        at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
        at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
        at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at retrofit.Platform$Android$2$1.run(Platform.java:142)
        at java.lang.Thread.run(Thread.java:856)
 Caused by: java.lang.IllegalArgumentException: TimeTrackerWebServiceMethods.deleteLoggedHour: @Body parameters cannot be used with form or multi-part encoding. (parameter #1)
        at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:107)
        at retrofit.RestMethodInfo.parameterError(RestMethodInfo.java:111)
        at retrofit.RestMethodInfo.parseParameters(RestMethodInfo.java:387)
        at retrofit.RestMethodInfo.init(RestMethodInfo.java:118)
        at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:294)
at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) 
at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
            at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at retrofit.Platform$Android$2$1.run(Platform.java:142)
            at java.lang.Thread.run(Thread.java:856)