gpt4 book ai didi

java - NPE 很难从 logcat 中发现它似乎是 Arraylist 但每个项目都应该设置

转载 作者:行者123 更新时间:2023-12-01 18:20:15 25 4
gpt4 key购买 nike

出于学习目的构建 GitHub Repo 应用程序,我陷入了 NullPointerException 的世界。

所以它在第 119 行说 ArrayList 为空,这是通过 Retrofit 的简单回调我尝试获取数据,然后进一步设置数据。我不确定在这个过程中到底哪里失败了,因为它只是指向第 119 行数组的初始化,但我正在迭代该数组,然后将每个项目添加到集合中。

拥有更多专业知识的人能够发现我无法发现的东西。

欢迎任何建议。

Call<GitHubRepo> call = gitHubClient.getRepos(searchTerm, pageNumber, resultsPerPage);
call.enqueue(new Callback<GitHubRepo>() {
@Override
public void onResponse(Call<GitHubRepo> call, Response<GitHubRepo> response) {
ArrayList<Item> itemsList = response.body().getItems();
for(int i = 0; i < itemsList.size(); i++) {
ModelCachedGitHubProject currentProject = new ModelCachedGitHubProject();
Item responseItem = itemsList.get(i);
currentProject.setOwnerName(responseItem.getOwner().getLogin());
currentProject.setRepoName(responseItem.getName());
currentProject.setRepoSize(responseItem.getSize());
currentProject.setHasWiki(responseItem.isHas_wiki());
currentProject.setCreatedAt(responseItem.getCreated_at());
currentProject.setPushedAt(responseItem.getPushed_at());
currentProject.setUpdatedAt(responseItem.getUpdated_at());
currentProject.setHtmlUrl(responseItem.getHtml_url());
currentProject.setAvatarUrl(responseItem.getOwner().getAvatar_url());
currentProject.setLanguage(responseItem.getLanguage());
currentProject.setForksCount(responseItem.getForks_count());
currentProject.setScore(responseItem.getScore());
currentProject.setDescription(responseItem.getDescription());
gitHubProjectsList.add(currentProject);
}

需要任何其他类(class),请询问。谢谢。

堆栈跟踪:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.benmohammad.repoapp, PID: 2325
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList com.benmohammad.repoapp.data.webservice.apiresponse.GitHubRepo.getItems()' on a null object reference
at com.benmohammad.repoapp.data.DataRepository$1.onResponse(DataRepository.java:119)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda

GitHub 存储库 Repo

谢谢

public void updateFromWebservice(final String searchTerm, final int pageNumber, int resultsPerPage) {
webServiceMessageCallStatus.setValue(WebServiceMessage.UPDATING_STATUS);
final List<ModelCachedGitHubProject> gitHubProjectsList = new ArrayList<>();
if(retrofit == null || gitHubClient == null) {
retrofit = new Retrofit.Builder().baseUrl(GitHubClientService.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
gitHubClient = retrofit.create(GitHubClientService.class);
}
Call<GitHubRepo> call = gitHubClient.getRepos(searchTerm, pageNumber, resultsPerPage);
call.enqueue(new Callback<GitHubRepo>() {
@Override
public void onResponse(Call<GitHubRepo> call, Response<GitHubRepo> response) {
ArrayList<Item> itemsList = response.body().getItems();
for(int i = 0; i < itemsList.size(); i++) {
ModelCachedGitHubProject currentProject = new ModelCachedGitHubProject();
Item responseItem = itemsList.get(i);
currentProject.setOwnerName(responseItem.getOwner().getLogin());
currentProject.setRepoName(responseItem.getName());
currentProject.setRepoSize(responseItem.getSize());
currentProject.setHasWiki(responseItem.isHas_wiki());
currentProject.setCreatedAt(responseItem.getCreated_at());
currentProject.setPushedAt(responseItem.getPushed_at());
currentProject.setUpdatedAt(responseItem.getUpdated_at());
currentProject.setHtmlUrl(responseItem.getHtml_url());
currentProject.setAvatarUrl(responseItem.getOwner().getAvatar_url());
currentProject.setLanguage(responseItem.getLanguage());
currentProject.setForksCount(responseItem.getForks_count());
currentProject.setScore(responseItem.getScore());
currentProject.setDescription(responseItem.getDescription());
gitHubProjectsList.add(currentProject);
}

if(!gitHubProjectsList.isEmpty()) {
boolean clearPreviousCache;
if(pageNumber == 1) {
clearPreviousCache = true;
saveLastSearchTerm(searchTerm);

} else clearPreviousCache = false;
cacheProjectsList(gitHubProjectsList, clearPreviousCache);
setLastRefreshDate(new Date());
webServiceMessageCallStatus.postValue(WebServiceMessage.ON_RESPONSE_SUCCESS);
} else {
if(pageNumber == 1)
webServiceMessageCallStatus.postValue(WebServiceMessage.ON_RESPONSE_NOTHING_FOUND);
else {
webServiceMessageCallStatus.postValue(WebServiceMessage.ON_RESPONSE_NO_MORE_RESULTS);
}
}
}

@Override
public void onFailure(Call<GitHubRepo> call, Throwable t) {
webServiceMessageCallStatus.postValue(WebServiceMessage.ON_FAILURE);
}
});
}

最佳答案

响应为空,假设您正在谈论 ArrayList itemsList 行。我们看不到行号。如果您查看堆栈跟踪,它会在空对象引用上显示 .getItems()'。 这意味着 response.getBody() 为 null。因此,您需要检查该响应正在初始化(发送)的位置,并确保该类/服务没有问题。

关于java - NPE 很难从 logcat 中发现它似乎是 Arraylist 但每个项目都应该设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60304811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com