如何在 Android 中使用 Retrofit 获取内部 JSON 对象? (不是数组)
How to get inner JSON object with Retrofit in Android? (not array)
我想通过 Retrofit 获取用户的账号。
当我发送一个令牌(请求)然后得到下面的响应 json.
{
"resultCode": 200,
"resultData": {
"user": {
"uid": 154,
"email": "test11@testtesttest.com",
"nickname": "0717",
"profilepath": "profilepath.jpg",
"password": "password",
"registed_dt": "2020-07-01 00:00:00",
"updated_dt": "2020-07-17 06:13:07",
"secession": "N",
"noti_state": "N"
}
},
"message": "Success"
}
我已经在“http://www.jsonschema2pojo.org/”中进行了解析,并制作了关于 SerializedName 的 class。
public class ApiResultDto {
@SerializedName("resultCode")
private int resultCode;
@SerializedName("resultData")
private JsonObject resultData;
@SerializedName("message")
private String message;
public int getResultCode(){
return resultCode;
}
...
public static class ResultData {
@SerializedName("user")
private User user;
public User getUser() {
return user;
}
}
public static class User {
@SerializedName("uid")
@Expose
private Integer uid;
@SerializedName("email")
@Expose
private String email;
@SerializedName("nickname")
...
public String getEmail() {
return email;
}
public String getNickname() {
return nickname;
}
...
}
}
但是,我无法获得昵称和电子邮件。
error : java.lang.String com.google.gson.JsonObject.getAsString()
我不确定如何获取电子邮件和昵称值。
private void getUser() {
getToken = userPreference.getInstance().getString(Config.KEY_TOKEN);
RetrofitInterface retrofitInterface = RetrofitClient.buildHTTPClient();
Call<ApiResultDto> call = retrofitInterface.account(getToken);
UserPreference.getInstance().putString(Config.KEY_TOKEN, getToken);
call.enqueue(new Callback<ApiResultDto>() {
public void onResponse(Call<ApiResultDto> call, Response<ApiResultDto> response) {
if (response.isSuccessful()) {
if (resultData != null) {
apiResultDto = response.body();
String userEmail = apiResultDto.getResultData().get("email").getAsString();
String userNickName = apiResultDto.getResultData().get("nickname").getAsString();
} else {
Log.e("getUser", "Account null ");
}
if (getToken != null) {
}
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<ApiResultDto> call, Throwable t) {
Toast.makeText(getApplication(), "Fail", Toast.LENGTH_SHORT).show();
}
});
}
而不是 private JsonObject resultData;
试试 private ResultData resultData;
public class ApiResultDto{
@SerializedName("resultData")
private ResultData resultData;
@SerializedName("resultCode")
private int resultCode;
@SerializedName("message")
private String message;
public ResultData getResultData(){
return resultData;
}
public int getResultCode(){
return resultCode;
}
public String getMessage(){
return message;
}
}
public class ResultData{
@SerializedName("user")
private User user;
public User getUser(){
return user;
}
}
public class User{
@SerializedName("noti_state")
private String notiState;
@SerializedName("uid")
private int uid;
@SerializedName("password")
private String password;
@SerializedName("secession")
private String secession;
@SerializedName("updated_dt")
private String updatedDt;
@SerializedName("nickname")
private String nickname;
@SerializedName("registed_dt")
private String registedDt;
@SerializedName("profilepath")
private String profilepath;
@SerializedName("email")
private String email;
public String getNotiState(){
return notiState;
}
public int getUid(){
return uid;
}
public String getPassword(){
return password;
}
public String getSecession(){
return secession;
}
public String getUpdatedDt(){
return updatedDt;
}
public String getNickname(){
return nickname;
}
public String getRegistedDt(){
return registedDt;
}
public String getProfilepath(){
return profilepath;
}
public String getEmail(){
return email;
}
}
并在 onResponse()
中:
public void onResponse(Call<ApiResultDto> call, Response<ApiResultDto> response) {
if (response.isSuccessful()) {
if (resultData != null) {
apiResultDto = response.body();
String userEmail = apiResultDto.getResultData().getUser().getEmail();
String userNickName = apiResultDto.getResultData().getUser().getNickname();
} else {
Log.e("getUser", "Account null ");
}
if (getToken != null) {
}
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
}
我想通过 Retrofit 获取用户的账号。 当我发送一个令牌(请求)然后得到下面的响应 json.
{
"resultCode": 200,
"resultData": {
"user": {
"uid": 154,
"email": "test11@testtesttest.com",
"nickname": "0717",
"profilepath": "profilepath.jpg",
"password": "password",
"registed_dt": "2020-07-01 00:00:00",
"updated_dt": "2020-07-17 06:13:07",
"secession": "N",
"noti_state": "N"
}
},
"message": "Success"
}
我已经在“http://www.jsonschema2pojo.org/”中进行了解析,并制作了关于 SerializedName 的 class。
public class ApiResultDto {
@SerializedName("resultCode")
private int resultCode;
@SerializedName("resultData")
private JsonObject resultData;
@SerializedName("message")
private String message;
public int getResultCode(){
return resultCode;
}
...
public static class ResultData {
@SerializedName("user")
private User user;
public User getUser() {
return user;
}
}
public static class User {
@SerializedName("uid")
@Expose
private Integer uid;
@SerializedName("email")
@Expose
private String email;
@SerializedName("nickname")
...
public String getEmail() {
return email;
}
public String getNickname() {
return nickname;
}
...
}
}
但是,我无法获得昵称和电子邮件。
error : java.lang.String com.google.gson.JsonObject.getAsString()
我不确定如何获取电子邮件和昵称值。
private void getUser() {
getToken = userPreference.getInstance().getString(Config.KEY_TOKEN);
RetrofitInterface retrofitInterface = RetrofitClient.buildHTTPClient();
Call<ApiResultDto> call = retrofitInterface.account(getToken);
UserPreference.getInstance().putString(Config.KEY_TOKEN, getToken);
call.enqueue(new Callback<ApiResultDto>() {
public void onResponse(Call<ApiResultDto> call, Response<ApiResultDto> response) {
if (response.isSuccessful()) {
if (resultData != null) {
apiResultDto = response.body();
String userEmail = apiResultDto.getResultData().get("email").getAsString();
String userNickName = apiResultDto.getResultData().get("nickname").getAsString();
} else {
Log.e("getUser", "Account null ");
}
if (getToken != null) {
}
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<ApiResultDto> call, Throwable t) {
Toast.makeText(getApplication(), "Fail", Toast.LENGTH_SHORT).show();
}
});
}
而不是 private JsonObject resultData;
试试 private ResultData resultData;
public class ApiResultDto{
@SerializedName("resultData")
private ResultData resultData;
@SerializedName("resultCode")
private int resultCode;
@SerializedName("message")
private String message;
public ResultData getResultData(){
return resultData;
}
public int getResultCode(){
return resultCode;
}
public String getMessage(){
return message;
}
}
public class ResultData{
@SerializedName("user")
private User user;
public User getUser(){
return user;
}
}
public class User{
@SerializedName("noti_state")
private String notiState;
@SerializedName("uid")
private int uid;
@SerializedName("password")
private String password;
@SerializedName("secession")
private String secession;
@SerializedName("updated_dt")
private String updatedDt;
@SerializedName("nickname")
private String nickname;
@SerializedName("registed_dt")
private String registedDt;
@SerializedName("profilepath")
private String profilepath;
@SerializedName("email")
private String email;
public String getNotiState(){
return notiState;
}
public int getUid(){
return uid;
}
public String getPassword(){
return password;
}
public String getSecession(){
return secession;
}
public String getUpdatedDt(){
return updatedDt;
}
public String getNickname(){
return nickname;
}
public String getRegistedDt(){
return registedDt;
}
public String getProfilepath(){
return profilepath;
}
public String getEmail(){
return email;
}
}
并在 onResponse()
中:
public void onResponse(Call<ApiResultDto> call, Response<ApiResultDto> response) {
if (response.isSuccessful()) {
if (resultData != null) {
apiResultDto = response.body();
String userEmail = apiResultDto.getResultData().getUser().getEmail();
String userNickName = apiResultDto.getResultData().getUser().getNickname();
} else {
Log.e("getUser", "Account null ");
}
if (getToken != null) {
}
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
}