I have ViewPager
in my fragment and I am trying to load images in ViewPager
from server. Images are successfully fetched from server in logcat but unable to show in view pager and app crashes.
It is showing below error in log cat:
java.lang.NullPointerException: Argument must not be null
at com.bumptech.glide.util.Preconditions.checkNotNull(Preconditions.java:31)
at com.bumptech.glide.util.Preconditions.checkNotNull(Preconditions.java:25)
at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:675)
at Adapters.HomeOfferAdapter.instantiateItem(HomeOfferAdapter.java:57)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1010)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1158)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1092)
at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:540)
at com.app.bookbudiapp.Home$4$1.run(Home.java:371)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
This is my code below:
HomeOfferAdapter.java
public class HomeOfferAdapter extends PagerAdapter {
private Context context;
private LayoutInflater layoutInflater;
private List<HomeOffersModel> banners;
public HomeOfferAdapter(List<HomeOffersModel> banners,Context context){
this.banners = banners;
this.context = context;
}
@Override
public int getCount() {
return banners.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
assert layoutInflater != null;
View view = layoutInflater.inflate(R.layout.onboard_frag,container,false);
ImageView slideImage = view.findViewById(R.id.offerImage);
HomeOffersModel model = banners.get(position);
RequestOptions options = new RequestOptions();
options.placeholder(R.drawable.openbook);
Glide.with(context).load(model.getOffers()).apply(options).into(slideImage);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((LinearLayout)object);
}
}
Home.java
public class Home extends Fragment {
ViewPager homeOffers;
HomeOfferAdapter offerAdapter;
List<HomeOffersModel> banners;
private static final String HOME_OFFERS = "https://example.com";
public Home() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);
homeOffers = view.findViewById(R.id.homeOffers);
banners = new ArrayList<>();
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(22,TimeUnit.SECONDS)
.readTimeout(22,TimeUnit.SECONDS)
.writeTimeout(22,TimeUnit.SECONDS)
.build();
Request request = new Request.Builder().url(HOME_OFFERS).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
JSONArray jsonArray = new JSONArray(response.body().string());
for (int i=0 ; i<jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String str = jsonObject.getString("Image");
Log.d("response",str);
HomeOffersModel model = new HomeOffersModel(str);
banners.add(model);
}
offerAdapter = new HomeOfferAdapter(banners, getActivity());
homeOffers.setAdapter(offerAdapter);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
response.close();
}
}
});
}
}
@Override
public void onFailure(Call call, final IOException e) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
TastyToast.makeText(getActivity(),e.getMessage(),TastyToast.LENGTH_SHORT,TastyToast.ERROR).show();
}
});
}
});
return view;
}
}
HomeOffersModel.java
public class HomeOffersModel {
String offers;
public HomeOffersModel(){
}
public HomeOffersModel(String offers){
this.offers = offers;
}
public String getOffers() {
return offers;
}
public void setOffers(String offers) {
this.offers = offers;
}
}
Someone please let me know why I am getting an above error though I have set up an adapter correctly. Any help would be appreciated.
THANKS