如何使用 POST 方法在 android 中使用 Retrofit 发送原始 JSON
How to use POST method to send raw JSON using Retrofit in android
我想 post 关注 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);
但无法达到我想要的,请帮助我实现我需要的。提前致谢
您需要在 res 对象上调用 enqueue 函数。
See this example.
试试这个
我在尝试仅 POST data in raw
表单时遇到了同样的问题
- 你的API界面
@POST("your_url_here")
Call<Object> getUser(@Body Map<String, String> body);
- 打电话给你的
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();
}
你可以像这样先创建一个 Pojo class 就像
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 喜欢
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());
}
});
我想 post 关注 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);
但无法达到我想要的,请帮助我实现我需要的。提前致谢
您需要在 res 对象上调用 enqueue 函数。 See this example.
试试这个
我在尝试仅 POST data in raw
表单时遇到了同样的问题
- 你的API界面
@POST("your_url_here")
Call<Object> getUser(@Body Map<String, String> body);
- 打电话给你的
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();
}
你可以像这样先创建一个 Pojo class 就像
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 喜欢
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());
}
});