Retrofit POST Request with body parameters android

后端 未结 3 1290
Happy的楠姐
Happy的楠姐 2021-01-28 05:25

I need to execute post request with retrofit but i have a problem which i can\'t understand very well. Before trying with code i tested api call with Postman an

相关标签:
3条回答
  • 2021-01-28 05:55

    First you need to create request( POJO Class)

    public class FeedbackRequest {
       public String email;
       public String feedback;
    }
    

    when you call sendFeedbackRequest() pass the FeedbackRequest like below"

    FeedbackRequest req = new FeedbackRequest();
    req.email= "email";
    req.feedback= "feedback"
    sendFeedbackRequest(req)
    

    after that your sendFeedbackRequest() should be like this

      private void sendFeedbackRequest(FeedbackRequest request){
          API.request().sendFeedback(request).enqueue(new Callback<String>() {
          @Override
          public void onResponse(Call<String> call, Response<String> response) {
            goToMainActivity();
          }
    
          @Override
          public void onFailure(Call<String> call, Throwable t) {
            Toast.makeText(SplashScreenActivity.this, R.string.try_again_later, Toast.LENGTH_SHORT).show();
        }
    });
    

    And your retrofit request should be like this,

    @FormUrlEncoded
    @POST("api/android-feedback")
    @Headers({"Content-Type: application/json", "Authorization: F31daaw313415"})
    Call<String> sendFeedback(@Body FeedbackRequest request);
    

    Now it should work. feel free to ask anything.

    0 讨论(0)
  • 2021-01-28 06:07

    You are using a Gson converter factory. It might be easier to create a single object that represents your body, and use that instead of all individual parameters. That way, you should be able to simple follow along with the examples on the Retrofit website.enter link description here There are also many site that let you generate your Plain Old Java Objects for you, like this one:

    E.g. your Api call:

    @POST("api/android-feedback")
    Call<String> sendFeedback(@Body FeedbackBody feedback);    
    

    And your FeedbackBody class:

    public class FeedbackBody{
        private final String email;
        private final String feedback;
    
        public FeedbackBody(String email, String feedback){
            this.email = email;
            this.feedback = feedback;
        }
    }
    
    0 讨论(0)
  • 2021-01-28 06:13

    Java:

    @POST("/api/android-feedback")
    Call<String> sendFeedback(@Body FeedbackBody feedback);
    

    Kotlin:

    @POST("/api/android-feedback")
    fun sendFeedback(@Body feedback: FeedbackBody): Call<String>
    

    Also, probably you forgot leading slash in the endpoint.

    0 讨论(0)
提交回复
热议问题