錯誤如下圖:
2020-05-18 21:24:07.135 23844-23844/com.example.mvptest E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mvptest, PID: 23844
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:4732)
at android.view.View.performClick(View.java:5644)
at android.view.View$PerformClick.run(View.java:22440)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6166)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4727)
at android.view.View.performClick(View.java:5644)
at android.view.View$PerformClick.run(View.java:22440)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6166)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.IllegalArgumentException: @FieldMap parameters can only be used with form encoding. (parameter #1)
for method RequestApi.register
at retrofit2.Utils.methodError(Utils.java:53)
at retrofit2.Utils.methodError(Utils.java:43)
at retrofit2.Utils.parameterError(Utils.java:62)
at retrofit2.RequestFactory$Builder.parseParameterAnnotation(RequestFactory.java:578)
at retrofit2.RequestFactory$Builder.parseParameter(RequestFactory.java:306)
at retrofit2.RequestFactory$Builder.build(RequestFactory.java:193)
at retrofit2.RequestFactory.parseAnnotations(RequestFactory.java:67)
at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:26)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:192)
at retrofit2.Retrofit$1.invoke(Retrofit.java:149)
at java.lang.reflect.Proxy.invoke(Proxy.java:813)
at $Proxy0.register(Unknown Source)
at com.example.mvptest.model.HomeModel.requestData(HomeModel.java:50)
at com.example.mvptest.presenter.HomePresenter.setShowData(HomePresenter.java:36)
at com.example.mvptest.MainActivity.showResult(MainActivity.java:120)
我們在使用Retrofit進行POST請求的時候使用表單提交需要使用@FieldMap和@FormUrlEncoded註解結合使用不然會報錯如上,解決辦法上面日誌也給出了
@FieldMap parameters can only be used with form encoding. (parameter #1)
意思是說需要一個from表單編碼加上即可
@FormUrlEncoded
@POST("/user/register")
Call<RegisterBean> register(@FieldMap Map<String, String> data);