2017-02-06 27 views
0

Я создаю андроид, но список не отображается. Я думаю, что есть ошибка от моего адаптера. Я покажу JSON или мой сеттер getter, если вы, ребята, нуждаетесь в них.Recyclerview android, мой адаптер не работает

Это моя деятельность

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; 
    } 

это мой адаптер

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); 
     } 
    } 
} 

Я пытался отладить эту программу и получил List<ProductList> list является нулевым

+2

Вы только что ответили на свой вопрос, ваш список пуст, так как вы его не инициализировали. – Enzokie

+0

Как это сделать? Прошу прощения, я новичок в разработке android – Pandu

ответ

2

Вашего public List<ProductList> list; является нулевого.

вы должны объявить переменную списка, как показано ниже:

private List<ProductList> list = new ArrayList<>(); 

и в вашем onNext() вы должны заполнить свой список из ответа и называют adapter.notifyDataSetChanged()

+0

, где я должен поместить эту переменную? в моем адаптере или моей деятельности? – Pandu

+0

Поместите это в свою деятельность –

+0

Я поместил это в свою деятельность, и мой адаптер по-прежнему равен нулю – Pandu

0

В запросе метода положить в onnext: получить ответ и добавить в список

adapter = new ProductAdapter(context, list); 
rvView.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 

в к деятельности объявить

private List<ProductList> list = new ArrayList<>(); 
+0

Я пробовал это, но recyclerview является ссылкой на нулевой объект – Pandu

+0

Копировать и прошлую ошибку из logcat – KMI

+0

это ошибка Попытка для вызова виртуального метода 'void android.support.v7.widget.RecyclerView.setAdapter (android.support.v7.widget.RecyclerView $ Adapter)' на ссылке нулевого объекта – Pandu