رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران
kamran_14

لیست کردن تعدادی آیتم در RecyclerView


پست های پیشنهاد شده

سلام

من کدها رو نوشتم ولی با این خطا مواجه میشوم.

ایراد کدهای من چی میتونه باشه


E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.shop, PID: 3607
    android.view.InflateException: Binary XML file line #24: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:761)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
        at com.example.shop.Adapter.ProductAdapter.onCreateViewHolder(ProductAdapter.java:35)
        at com.example.shop.Adapter.ProductAdapter.onCreateViewHolder(ProductAdapter.java:19)
        at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194)
        at android.view.View.layout(View.java:17637)
        at android.view.ViewGroup.layout(ViewGroup.java:5575)
        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
        at android.view.View.layout(View.java:17637)
        at android.view.ViewGroup.layout(ViewGroup.java:5575)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:17637)
        at android.view.ViewGroup.layout(ViewGroup.java:5575)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
        at android.view.View.layout(View.java:17637)
        at android.view.ViewGroup.layout(ViewGroup.java:5575)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:17637)
        at android.view.ViewGroup.layout(ViewGroup.java:5575)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
        at android.view.View.layout(View.java:17637)
        at android.view.ViewGroup.layout(ViewGroup.java:5575)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:726)
        at android.view.View.layout(View.java:17637)
        at android.view.ViewGroup.layout(ViewGroup.java:5575)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
        at android.view.Choreographer.doCallbacks(Choreographer.java:686)
        at android.view.Choreographer.doFrame(Choreographer.java:621)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Application terminated.

من در productActivity اینارو نوشتم:

package com.example.shop.Adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.shop.Models.Products;
import com.example.shop.R;
import java.util.ArrayList;
import java.util.List;

public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder>{
    private List<Products> products=new ArrayList<Products> (  );
    private Context context;

    public ProductAdapter(List<Products> products, Context context) {
        this.products = products;
        this.context = context;
    }


    @NonNull
    @Override
    public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view=LayoutInflater.from ( parent.getContext () ).inflate ( R.layout.products_list_row,parent,false);//inflater.inflate (R.layout.products_list_row,parent);
        return new ProductViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) {
        Products oP=products.get ( position );
        holder.txt_priceProduct.setText ( oP.getPriceProduct () );
        holder.txt_nameProduct.setText (oP.getNameProduct () );
        holder.img_imgProduct.setImageDrawable (oP.getImg_product () );
    }

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

    public class ProductViewHolder extends RecyclerView.ViewHolder {
        public ImageView img_imgProduct;
        public TextView txt_nameProduct;
        public TextView txt_priceProduct;
        public ProductViewHolder(@NonNull View itemView) {
            super ( itemView );
            img_imgProduct=itemView.findViewById ( R.id.imgProduct );
            txt_nameProduct=itemView.findViewById ( R.id.nameProduct );
            txt_priceProduct=itemView.findViewById ( R.id.priceProduct );
        }

    }
}

و در productModel این کدهارو:

package com.example.shop.Models;

import android.graphics.drawable.Drawable;

public class Products {
    private Drawable img_product;
    private String nameProduct;
    private String priceProduct;

    public Products(Drawable img_product, String nameProduct, String priceProduct) {
        this.img_product = img_product;
        this.nameProduct = nameProduct;
        this.priceProduct = priceProduct;
    }

    public Drawable getImg_product() {
        return img_product;
    }

    public void setImg_product(Drawable img_product) {
        this.img_product = img_product;
    }

    public String getNameProduct() {
        return nameProduct;
    }

    public void setNameProduct(String nameProduct) {
        this.nameProduct = nameProduct;
    }

    public String getPriceProduct() {
        return priceProduct;
    }

    public void setPriceProduct(String priceProduct) {
        this.priceProduct = priceProduct;
    }
}

و در productAdapter این کدها رو:

package com.example.shop.Adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.shop.Models.Products;
import com.example.shop.R;
import java.util.ArrayList;
import java.util.List;

public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder>{
    private List<Products> products=new ArrayList<Products> (  );
    private Context context;

    public ProductAdapter(List<Products> products, Context context) {
        this.products = products;
        this.context = context;
    }


    @NonNull
    @Override
    public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view=LayoutInflater.from ( parent.getContext () ).inflate ( R.layout.products_list_row,parent,false);//inflater.inflate (R.layout.products_list_row,parent);
        return new ProductViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) {
        Products oP=products.get ( position );
        holder.txt_priceProduct.setText ( oP.getPriceProduct () );
        holder.txt_nameProduct.setText (oP.getNameProduct () );
        holder.img_imgProduct.setImageDrawable (oP.getImg_product () );
    }

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

    public class ProductViewHolder extends RecyclerView.ViewHolder {
        public ImageView img_imgProduct;
        public TextView txt_nameProduct;
        public TextView txt_priceProduct;
        public ProductViewHolder(@NonNull View itemView) {
            super ( itemView );
            img_imgProduct=itemView.findViewById ( R.id.imgProduct );
            txt_nameProduct=itemView.findViewById ( R.id.nameProduct );
            txt_priceProduct=itemView.findViewById ( R.id.priceProduct );
        }

    }
}

یک روزه که کلا من روی پیدا کردن خطا گذاشتم اما پیدا نکردم. لطفا کمکم کنید

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
Products oP=products.get ( position );

دراین قسمت یک لاگ بذارید ببنید که شی op مقدار میگیره! یا نه !

اگر null بود بررسی کنید ببنید که کانتینر لیستی که تزریق کردید به کلاس مقدار داره یانه ! یعنی کانتینر products نباید null باشه!

بهتر برای برنامه های اندروید حتما از unit test ها استفاده کنید، با استفاده از کد های تست در زمان توسعه یعنی اگر به صورت TDD کار کنید به راحتی این کد های تست می توانند به صورت hard code مقادیر هایی به کلاس ها ومتدهای شما ارسال کنند که به راحتی متوجه بشید که کدوم کلاس ومتد خطای منطقی از نوع Null Reference ارسال میکنند.

در صورتی که نخواهید از تست کلاس ها استفاده کنید، باید خودتون همیشه کد را با مقادیر hard code تست کنید که خیلی کار زمانبر والبته غیر اصولی هم هست!

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...