Android: Api 使用 RxJava 调用返回空响应

Android: Api call using RxJava returning null response

我正在使用 Retrofit 进行 API 调用,当我处理响应时出现错误,我正在尝试从此页面上的此 API 调用获取数据 https://my-json-server.typicode.com/jayraic/demo/db

尝试在空对象引用上调用接口方法'java.lang.Object java.util.List.get(int)'

改造碱基检出

public class NBADataFactory {

        private final static String BASE_URL = "https://my-json-server.typicode.com/jayraic/demo/";
        public final static String DB_URL = "https://my-json-server.typicode.com/jayraic/demo/db";

        public static NBAService create() {
            Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build();
            return retrofit.create(NBAService.class);

        }

改造调用

private void fetchTeamList() {

        NBAApplication nbaApplication = NBAApplication.create(context);
        NBAService nbaService = nbaApplication.getNbaService();

        Disposable disposable = nbaService.fetchTeam(NBADataFactory.DB_URL)
                .subscribeOn(nbaApplication.subscribeScheduler())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<NBAResponse>() {
                    @Override
                    public void accept(NBAResponse nbaResponse) {
                        changeTeamDataSet(nbaResponse.getTeamList());
                        teamProgress.set(View.GONE);
                        teamLabel.set(View.GONE);
                        teamRecycler.set(View.VISIBLE);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) {
                        messageLabel.set(context.getString(R.string.error_loading_people));
                        teamProgress.set(View.GONE);
                        teamLabel.set(View.VISIBLE);
                        teamRecycler.set(View.GONE);
                    }
                });

        compositeDisposable.add(disposable);
    }

    private void changeTeamDataSet(List<Team> teams) {
        teamList.addAll(teams);
        setChanged();
        notifyObservers();
    }

响应模型

public class NBAResponse {

    List<Team> teamList;

    public List<Team> getTeamList() {
        return teamList;
    }
}

团队模型

public class Team implements Serializable {

    @SerializedName("id") public String id;

    @SerializedName("full_name") public String full_name;

    @SerializedName("win") public String win;

    @SerializedName("losses") public String losses;

    @SerializedName("players") public List<Player> players;
}

我正在尝试解决这个问题,但仍停留在这个问题上,我们将不胜感激任何帮助或指导正确的道路。

响应 json 的外部数组名称为 teams,但在您的响应中 Pojo class 的名称为 teamList。以下任一项应该可以解决您的问题

List<Team> teams;

@SerializedName("teams")
List<Team> teamList;