I'm trying to fetching datas with Retrofit with an adapter on a listview viewholder.
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference on ViewHolder adapter first line and ViewholderFragment listView.setAdapter line.
My codes below. I dont know what can ı do and where is the problem.
Can anyone help me to overcome this issue?
ViewholderAdapter.java
public class ViewholderAdapter extends 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
);
}
}