RecyclerView不接受来自模型的构造函数

时间:2019-10-04 09:46:51

标签: java android android-recyclerview recycler-adapter

我不明白为什么它会引起问题。我从服务器中获取数据进行翻新,无法在recyclerview中使用。它使构造函数产生问题,但我不明白为什么会造成问题。我可以使用此模型成功地从服务中获取数据,但是问题是要放置适配器和recyvlierview。如何解决?enter image description here

ProductPage.java

public class ProductPage {
    private int productID;
    private String productName;
    private String productDescription;
    private List<String> productImages;
    private List<ProductPrice> productPrices;

    public int getProductID() {
        return productID;
    }

    public void setProductID(int productID) {
        this.productID = productID;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getProductDescription() {
        return productDescription;
    }

    public void setProductDescription(String productDescription) {
        this.productDescription = productDescription;
    }

    public List<String> getProductImages() {
        return productImages;
    }

    public void setProductImages(List<String> productImages) {
        this.productImages = productImages;
    }

    public List<ProductPrice> getProductPrices() {
        return productPrices;
    }

    public void setProductPrices(List<ProductPrice> productPrices) {
        this.productPrices = productPrices;
    }
}

ProductDetailAdapter.java

public class ProductDetailAdapter extends RecyclerView.Adapter<ProductDetailAdapter.ViewHolder> {
    private Context mContext;
    int rawLayout;
    private List<ProductPage> productPageList;
    private int cartAmount;


    public ProductDetailAdapter(Context mContext,int rawLayout, List<ProductPage> productPageList, CartListener cartListener) {
        this.mContext = mContext;
        this.rawLayout = rawLayout;
        this.productPageList = productPageList;
        this.cartListener = cartListener;
    }

    @NonNull
    @Override
    public ProductDetailAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
        View mView = LayoutInflater.from(parent.getContext()).inflate(rawLayout, parent, false);
        return new ViewHolder(mView);    }

    @Override
    public void onBindViewHolder(final ViewHolder viewHolder, final int position) {

        Glide.with(mContext).load(productPageList.get(position).getProductPrices().get(position).getShopImage())
                .apply(RequestOptions.placeholderOf(R.drawable.ic_glide_img).error(R.drawable.ic_glide_warning)).
                into(viewHolder.imgProductDetail);
        viewHolder.textProductDetailCost.setText(Double.toString(productPageList
                .get(position).getProductPrices().get(position).getShopProductPrice())+" TL");
        viewHolder.textProductDetailMarket.setText(productPageList.get(position).getProductPrices().get(position).getShopName());

    }

    @Override
    public int getItemCount() {
        return productPageList.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        private ImageView imgProductDetail;
        private TextView textProductDetailCost, textProductDetailMarket;
        private Button btnProductDetail;
        private CardView cardViewProductDetail;
        ViewHolder(View itemView){
            super(itemView);
            imgProductDetail = itemView.findViewById(R.id.imageView_product_detail);
            textProductDetailCost = itemView.findViewById(R.id.text_product_detail_cost);
            textProductDetailMarket = itemView.findViewById(R.id.textViewProductShopName);
            btnProductDetail = itemView.findViewById(R.id.buttonProductDetail);
            cardViewProductDetail = itemView.findViewById(R.id.cardViewProductDetail);
        }
    }
    public interface CartListener {
        void onProductSelect(ProductPage productPage);

    }
}

ProductActivity.java

  public class ProductActivity extends AppCompatActivity implements ProductDetailAdapter.CartListener {
    TextView textProductName, textDescription;
    RecyclerView recyclerViewProduct;
    protected RecyclerView.LayoutManager mLayoutManager;

    String productCost, productMarket, productImage, productTitle, prdouctMarketImage;
    int id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product);
        init();
        loadProductPage();
    }

    private void init() {
        textProductName = findViewById(R.id.text_product_title);
        imgProduct = findViewById(R.id.img_product);
        recyclerViewProduct = findViewById(R.id.product_recycylerwiew);
        textDescription = findViewById(R.id.text_product_description);
        textDescription.setMovementMethod(new ScrollingMovementMethod()); // Scroll yapabilmek için açmıştım
        mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerViewProduct.setLayoutManager(mLayoutManager);


    private void loadProductPage() {
        ApiInterface apiInterface = ApiClient.getRetrofitInstance().create(ApiInterface.class);
        Call<ProductPage> call = apiInterface.getProductPage(id);
        call.enqueue(new Callback<ProductPage>() {
            @Override
            public void onResponse(Call<ProductPage> call, Response<ProductPage> response) {
                if (response.isSuccessful()) {
                    ProductPage product_page_list = response.body();
                    textProductName.setText(product_page_list.getProductName());
                    textDescription.setText(product_page_list.getProductDescription());

                    Glide.with(getApplicationContext()).load(product_page_list.getProductImages())
                            .apply(RequestOptions.placeholderOf(R.drawable.ic_glide_img).error(R.drawable.ic_glide_warning)).
                            into(imgProduct);

                    ProductDetailAdapter myAdapter = new ProductDetailAdapter(getApplicationContext(),R.layout.product_detail_item_view,product_page_list,ProductActivity.this);
                    recyclerViewProduct.setAdapter(myAdapter);
                }
                else
                    ApiErrorUtils.parseError(response);
            }

            @Override
            public void onFailure(Call<ProductPage> call, Throwable t) {
                Log.d("response","apiError");
            }
        });


    }



    @Override
    public void onProductSelect(ProductPage productPage) {
    }

2 个答案:

答案 0 :(得分:1)

您只是将ProductPage对象传递给适配器。

ProductPage product_page_list = response.body();

但需要适配器

List<ProductPage> productPageList

所以您需要像这样将产品对象添加到产品列表中

 ProductPage productPage = response.body();
 List<ProductPage> productList=new ArrayList<>();
 productList.add(productPage);

答案 1 :(得分:0)

ProductPage product_page_list = response.body();

product_page_list不是List<ProductPage>()

您的适配器中需要List<ProductPage> productPageList