簡體   English   中英

如何在 ZE84E30B9390CDB64DB6DB2C9ABZ87 中使用 Retrofit 獲得內部 JSON object? (不是數組)

[英]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。

<ApiResultDto 類>

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;
        }

        ...
    }
}

但是,我無法獲得昵稱和 email。

error : java.lang.String com.google.gson.JsonObject.getAsString()

我不確定如何獲得 email 和昵稱值。

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();
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM