[英]How to both post request and get response (nested JSON) with retrofit android
這是嵌套的 JSON 請求
{
"user": {
"email": "123@mail.com",
"password": "12345678"
}
}
這是嵌套的 JSON 響應
{
"data": {
"renew_token": "e994c4d2-d93b-47e8-ab5f-9090b823f249",
"token": "419fff70-b1ee-4ea7-b636-ddbec6346794"
}
}
我能夠發布請求,但我正在努力在同一過程中對響應進行編碼
我目前的界面
public interface JsonApi {
@POST("session")
Call<RootUser> userLogin(@Body RootUser rootUser);
}
Model 請求
public class User{
public String email;
public String password;
}
public class RootUser{
public User user;
}
API 調用
private void userLogin(){
String email = etloginemail.getText().toString();
String password = etloginpassword.getText().toString();
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://the-digest-app.herokuapp.com/api/")
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonApi jsonApi = retrofit.create(JsonApi.class);
User user = new User(email, password);
RootUser rootUser = new RootUser(user);
Call<RootUser> call = jsonApi.userLogin(rootUser);
call.enqueue(new Callback<RootUser>() {
@Override
public void onResponse(Call<RootUser> call, Response<RootUser> response) {
Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<RootUser> call, Throwable t) {
Toast.makeText(LoginActivity.this, "Error", Toast.LENGTH_LONG).show();
}
});
}
如何定義獲取響應 function? 如果我做錯了什么,請告訴我!
您應該再創建一個 POJO 以進行響應,例如
public class LoginResponse{
@SerializedName("renew_token")
public String renewToken;
@SerializedName("token")
public String token;
}
public class UserLoginResponse{
public LoginResponse data;
}
你的 retrofit 界面應該看起來像
public interface JsonApi {
@POST("session")
Call<UserLoginResponse> userLogin(@Body RootUser rootUser);
}
和你的調用實現
call.enqueue(new Callback<UserLoginResponse>() {
@Override
public void onResponse(Call<UserLoginResponse> call, Response<UserLoginResponse> response) {
Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<UserLoginResponse> call, Throwable t) {
Toast.makeText(LoginActivity.this, "Error", Toast.LENGTH_LONG).show();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.