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;
我正在使用 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;