Android開發之Retrofit常見錯誤@FieldMap parameters can only be used with form encoding. (parameter #1)

錯誤如下圖:

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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章