api - Retrofit 2 获取数据到 Listview Viewholder 模式,java.util.ArrayList.size 上的空指针异常
问题描述
我正在尝试使用列表视图视图上的适配器通过 Retrofit 获取数据。
java.lang.NullPointerException:尝试在 ViewHolder 适配器第一行和 ViewholderFragment listView.setAdapter 行上的空对象引用上调用虚拟方法“int java.util.ArrayList.size()”。我的代码如下。我不知道我能做什么以及问题出在哪里。
谁能帮我克服这个问题?
ViewholderAdapter.java
公共类 ViewholderAdapter 扩展 ArrayAdapter{
@Override
public int getCount(){return items.size(); } //java.lang.NullPointerException
@Override
public Result getItem(int position){
return items.get(position);
}
public long getItemId(int position){
return position;
}
private class ViewHolder
{
TextView movie_year;
TextView movie_title;
TextView movie_desc;
ImageView movie_poster;
public ViewHolder(View view)
{
movie_year =(TextView)view.findViewById(R.id.movie_year);
movie_title =(TextView)view.findViewById(R.id.movie_title);
movie_desc =(TextView) view.findViewById(R.id.movie_desc);
movie_poster =(ImageView)view.findViewById(R.id.movie_poster);
}
}
@Override
public View getView(int position,View convertview,ViewGroup parent)
{ View view=convertview;
ViewHolder holder;
if(view==null)
{
view=LayoutInflater.from(context).inflate(R.layout.viewholder_item,parent,false);
holder=new ViewHolder(view);
view.setTag(holder);
}
else
{
holder=(ViewHolder) view.getTag();
}
holder.movie_title.setText(items.get(position).getTitle());
return view;
}
}
ViewHolderFragment.Java
public ViewHolderFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup fragmentContainer, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_view_holder, fragmentContainer, false);
ButterKnife.bind(this, view);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ListView listView = (ListView) getActivity().findViewById(R.id.listView);
listView.setAdapter(adapter); //java.lang.NullPointerException:
adapter = new ViewholderAdapter (getContext());
movieService = MovieApi.getClient().create(MovieService.class);
loadFirstPage();
}
private void loadFirstPage() {
Log.d(TAG, "loadFirstPage: ");
callTopRatedMoviesApi().enqueue(new Callback<TopRatedMovies>() {
@Override
public void onResponse(Call<TopRatedMovies> call, Response<TopRatedMovies> response) {
List<Result> results = fetchResults(response);
adapter.addAll(results);
}
@Override
public void onFailure(Call<TopRatedMovies> call, Throwable t) {
t.printStackTrace();
}
});
}
private List<Result> fetchResults(Response<TopRatedMovies> response) {
TopRatedMovies topRatedMovies = response.body();
return topRatedMovies.getResults();
}
private Call<TopRatedMovies> callTopRatedMoviesApi() {
return movieService.getTopRatedMovies(
getString(R.string.my_api_key),
"en_US",
currentPage
);
}
}
解决方案
推荐阅读
- r - Scale_size_manual 线指定替代线大小
- vue.js - Vue.set 不更新对象
- swift - Swift Google Maps - 加载语言环境图块
- python - ScikitLearn ML 模型得到 cv_results.mean() =0 和 cv_results.std() = 0
- php - 如何按区域阻止站点
- c - C中的MPI循环
- c# - Xceed.Words.NET 表跨越分页符
- c# - 将单独的日、月、年组合到日期时间
- react-native - 当我从 react-native-vector-icons 添加图标时出现 React Native 错误
- jq - `.[]|=empty` 的令人费解的行为