Reputation: 11
I make a recycler android, but the list doesn't show up. I think there's a mistake from my adapter. I will show the JSON or my setter getter, if you guys need them.
This My activity
public class ProductActivity extends AppCompatActivity {
private RecyclerView rvView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
public List<ProductList> list;
Context context;
public static final String MyPREFERENCES = "MyPrefs" ;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.f_list_of_product);
request(constructSignUpRequest());
rvView = (RecyclerView) findViewById(R.id.rv);
rvView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
rvView.setLayoutManager(layoutManager);
adapter = new ProductAdapter(context, list);
rvView.setAdapter(adapter);
}
public BTNService.Api getApi() {
return getBTNService().getApi();
}
public BTNService getBTNService() {
return new BTNService(this);
}
void request(final ProductListRequest productListRequest) {
getApi().loadproductlist(productListRequest.getCode())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<ProductListResponse>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Timber.e(e.getLocalizedMessage());
}
@Override
public void onNext(ProductListResponse response) {
if (response != null) {
}
}
});
}
public ProductListRequest constructSignUpRequest() {
ProductListRequest request = new ProductListRequest();
SharedPreferences prefs = getSharedPreferences(MyPREFERENCES, MODE_PRIVATE);
request.setCode(prefs.getString(Category, ""));
return request;
}
this is My adapter
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.CatalogueHolder> {
private Context context;
private List<ProductList> list;
public ProductAdapter(Context context, List<ProductList> list) {
this.context = context;
this.list = list;
}
@Override
public CatalogueHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_product, parent, false);
CatalogueHolder catalogueHolder = new CatalogueHolder(itemView);
return catalogueHolder;
}
@Override
public void onBindViewHolder(CatalogueHolder holder, int position) {
final ProductList item = list.get(position);
holder.itemView.setTag(item);
holder.productName.setText(item.getName());
}
@Override
public int getItemCount() {
return list != null ? list.size() : 0;
}
public static class CatalogueHolder extends RecyclerView.ViewHolder {
@Bind(R.id.productname)
TextView productName;
@Bind(R.id.typeProduct)
TextView typeProduct;
@Bind(R.id.price)
TextView price;
@Bind(R.id.date)
TextView date;
public CatalogueHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
I've tried to debug this program, and got List<ProductList> list
is null
Upvotes: 0
Views: 3018
Reputation: 258
In request method put in onnext: get response and add to list
adapter = new ProductAdapter(context, list);
rvView.setAdapter(adapter);
adapter.notifyDataSetChanged();
In to activity declare
private List<ProductList> list = new ArrayList<>();
Upvotes: 0
Reputation: 6334
Your public List<ProductList> list;
is null .
you should declare the list variable as below:
private List<ProductList> list = new ArrayList<>();
and in your onNext()
you should fill up your list from the response and call adapter.notifyDataSetChanged()
Upvotes: 1