【问题标题】:How to use POST method to send raw JSON using Retrofit in android如何使用 POST 方法在 Android 中使用 Retrofit 发送原始 JSON
【发布时间】:2018-01-04 17:11:58
【问题描述】:

我想发布以下 JSON,

{
  "name": {
          "firstName": "f_name",
          "lastName": "l_name"
  },
  "password": "mypassword123",
  "email": "test.mail@gmail.com"
}

接口里面的注册方法是,

@POST("user/createuser")
Call<RegisterResponseModel> register(@Body RegisterModel body);

使用注册方法,例如,

Name name = new Name("f_name", "l_name");

RegisterModel registerModel = new RegisterModel(name, "mypassword123", "test.mail@gmail.com");

Call<RegisterResponseModel> res = apiService.register(registerModel);

但无法达到我想要的,请帮助我实现我需要的。提前致谢

【问题讨论】:

标签: android gson retrofit android-json


【解决方案1】:

你可以这样做,首先创建一个像这样的 Pojo 类

class SendDataModel{

    private String email;
    private Name name;
    private String password;

    public String getEmail ()
    {
        return email;
    }

    public void setEmail (String email)
    {
        this.email = email;
    }

    public Name getName ()
    {
        return name;
    }

    public void setName (Name name)
    {
        this.name = name;
    }

    public String getPassword ()
    {
        return password;
    }

    public void setPassword (String password)
    {
        this.password = password;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [email = "+email+", name = "+name+", password = "+password+"]";
    }
}

和其他类似的 Pojo 类

class Name{
    private String lastName;

    private String firstName;

    public String getLastName ()
    {
        return lastName;
    }

    public void setLastName (String lastName)
    {
        this.lastName = lastName;
    }

    public String getFirstName ()
    {
        return firstName;
    }

    public void setFirstName (String firstName)
    {
        this.firstName = firstName;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [lastName = "+lastName+", firstName = "+firstName+"]";
    }
}

并设置你的名字和姓氏

Name name = new Name();
    name.setFirstName();
    name.setLastName();
SendDataModel sendDatamodel=new SendDataModel();
    sendDatamodel.setName(name);
    sendDatamodel.setEmail("yourEmail")
    sendDatamodel.setPassword("yourPassword"); 

并将您的 sendDatamodel 传递给您的请求。

Call<RegisterResponseModel> res = apiService.register(sendDatamodel);
res.enqueue(new Callback<RegisterResponseModel>() {
    @Override
    public void onResponse(Call<RegisterResponseModel> call, 
    Response<RegisterResponseModel> response) {

    }

    @Override
    public void onFailure(Call<RegisterResponseModel> call, Throwable t) 
    {
        // Log error here since request failed
        Log.e(TAG, t.toString());
    }
});

【讨论】:

    【解决方案2】:

    试试这个

    我在尝试仅POST data in raw 表单时遇到了同样的问题

    1. 您的 API 接口

    @POST("your_url_here")
    Call<Object> getUser(@Body Map<String, String> body);
    

    1. 致电您的class

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    ApiInterface apiInterface = retrofit.create(ApiInterface.class);
    
    try {
        Map<String, String> requestBody = new HashMap<>();
        requestBody.put("email", "abc@gmail.com");
        requestBody.put("password", "123678");
        Call<Object> call=apiInterface.getUser(requestBody);
        call.enqueue(new Callback<Object>() {
            @Override
            public void onResponse(Call<Object> call, Response<Object> response) {
                try {
                    JSONObject object=new JSONObject(new Gson().toJson(response.body()));
                    Log.e("TAG", "onResponse: "+object );
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onFailure(Call<Object> call, Throwable t) {
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    【讨论】:

    • 成功了……!
    【解决方案3】:

    您需要在 res 对象上调用 enqueue 函数。 See this example.

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多