Java 使用车身删除仍不适用于改装
我已经尽力了,但还是不行。我已经将okhttp 2.0和okhttp urlconnection 2.0与改型1.9结合使用。删除主体仍然不起作用,我已经检查了之前发布的所有问题,但我仍然找不到答案。我做错什么了吗 这就是我的界面的样子: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
@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)