I'm using RxJava2 and Retrofit with ViewPager and I faced this error io.reactivex.exceptions.OnErrorNotImplementedException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
My code below Pojo class
public class Photo {
private String name;
private String imageUrl;
public Photo() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
interfaces
public interface inNetworkManager {
Observable<Photo[]> loadPhotos();
}
public interface inServices {
@GET("heroes.php")
Observable<Photo[]> loadPhotos();
}
NetworkManager class
public class NetworkManager implements inNetworkManager { private inServices services;
public NetworkManager() {
initData();
}
private void initData() {
OkHttpClient client = new OkHttpClient.Builder()
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(CommonsKt.getBASE_URL())
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
services = retrofit.create(inServices.class);
}
@Override
public Observable<Photo[]> loadPhotos() {
return services.loadPhotos()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
} Adapter
public class QuetoPhotoPageAdapter extends PagerAdapter {
private ArrayList<Photo> list;
private LayoutInflater inflater;
private Context context;
private AppCompatImageView imQueto;
public QuetoPhotoPageAdapter(ArrayList arrayList, Context context) {
this.list = arrayList;
this.context = context;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
public void addPhotos(Photo[] photos) {
list.clear();
notifyDataSetChanged();
Collections.addAll(list, photos);
notifyDataSetChanged();
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = inflater.inflate(R.layout.item_view, container, false);
imQueto = view.findViewById(R.id.imQuote);
Picasso.get()
.load(String.valueOf(list.get(position)))
.into(imQueto);
container.addView(view, 0);
return view;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view.equals(object);
}
}
MainActivity
public class MainActivity extends BaseActivity {
private ArrayList<Photo> list;
private QuetoPhotoPageAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addNet();
init();
}
/*new Consumer<Photo[]>() {
@Override
public void accept(Photo[] photos) throws Exception {
adapter.addPhotos(photos);
}
}*/
private void addNet() {
inNetworkManager manger = ((App) getApplication()).getManager();
Disposable d = manger.loadPhotos()
.subscribe(photos -> adapter.addPhotos(photos));
addDispose(d);
}
private void init() {
adapter = new QuetoPhotoPageAdapter(list, MainActivity.this);
}