第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何處理 Retrofit 2 中錯誤的不同模式?

如何處理 Retrofit 2 中錯誤的不同模式?

四季花海 2022-11-10 16:38:41
我有一個返回以下模式之一的 API:成功(找到數(shù)據(jù)){    item_count: 83,    items_per_page: 25,    offset: 25,    items: [        { ... },        { ... },        { ... },        ...    ]}失?。ㄎ凑业綌?shù)據(jù)){    success: false,    error: {        code: 200,        message: "Server is busy"    }}我想使用帶有 GSON 的 Retrofit 2 來圍繞這個 API 構(gòu)建一個包裝器并轉(zhuǎn)換為 POJO,但是我不確定如何處理 API 可能返回兩個完全不同的模式的事實?,F(xiàn)在,我有以下課程:public class PaginatedResponse<T> {    private int item_count;    private int items_per_page;    private int offset;    private List<T> items;    public PaginatedResponse<T>(int item_count, int items_per_page, int offset, List<T> items) {        this.item_count = item_count;        this.items_per_page = items_per_page;        this.offset = offset;        this.items = items;    }    public List<T> getItems() {        return this.items;    }}public class Item {    private int id;    private String name;    // ...}然后對于我的 API 接口,我有:public interface API {    @GET("items")    Call<PaginatedResponse<Item>> getItems();}然后最后用這個我試著說:Retrofit retrofit = new Retrofit.Builder()    .baseUrl("http://localhost")    .addConverterFactory(GsonConverterFactory.create())    .build();API api = retrofit.create(API.class);api.getItems().enqueue(new retrofit2.Callback<PaginatedResponse<Broadcast>>() {    @Override    public void onResponse(Call<PaginatedResponse<Broadcast>> call, Response<PaginatedResponse<Broadcast>> response) {        Log.d("SUCCESS", response.body().getItems().toString());    }    @Override    public void onFailure(Call<PaginatedResponse<Broadcast>> call, Throwable t) {        Log.d("FAILURE", t.toString());    }}只要沒有拋出錯誤,這似乎就可以了。但是當(dāng)拋出錯誤時,我在 Logcat 中得到以下信息并且我的應(yīng)用程序崩潰:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference似乎是因為失敗的 JSON 缺少一個items屬性,它設(shè)置List<Item> items為null
查看完整描述

1 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊

似乎是因為失敗的 JSON 缺少 items 屬性,它將 List items 設(shè)置為 null


是的。你得到了NullPointerException,因為你調(diào)用toString()了一個空對象。這是預(yù)期的行為。


解決方案


error由于和具有不同的模式success,因此您需要創(chuàng)建一個具有這兩個值的模型。下面給出一個最小的例子,


響應(yīng)模型.java



class ResponseModel {


    // ERROR

    private final Boolean success;

    private final Error error;


    // SUCCESS

    private final int item_count;

    // more success values... 


    ResponseModel(Boolean success, Error error, int item_count) {

        this.success = success;

        this.error = error;

        this.item_count = item_count;

    }


    public class Error {

        private final int code;

        private final String message;


        private Error(int code, String message) {

            this.code = code;

            this.message = message;

        }


        public int getCode() {

            return code;

        }


        public String getMessage() {

            return message;

        }


    }


    public Boolean getSuccess() {

        return success;

    }


    public Error getError() {

        return error;

    }


    public int getItem_count() {

        return item_count;

    }

}

在onResponse方法中,您可以像這樣檢查響應(yīng)是否成功


ResponseModel responseModel = response.body();


if (responseModel.getError() == null) {

    // success

    doSomethingWithSuccess(responseModel.getItem_count())

} else {

    // error

    doSomethingWithError(responseModel.getError())

}



查看完整回答
反對 回復(fù) 2022-11-10
  • 1 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號