-1

This is my Product.java


import android.os.Parcel;
import android.os.Parcelable;

public class Product implements Parcelable {
    private String name;
    private String detail;
    private String price;


    private int photo;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail;
    }
    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public int getPhoto() {
        return photo;
    }

    public void setPhoto(int photo) {
        this.photo = photo;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.detail);
        dest.writeString(this.price);
        dest.writeInt(this.photo);
    }

    public Product() {
    }

    protected Product(Parcel in) {
        this.name = in.readString();
        this.detail = in.readString();
        this.photo = in.readInt();
        this.price = in.readString();
    }

    public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>() {
        @Override
        public Product createFromParcel(Parcel source) {
            return new Product(source);
        }

        @Override
        public Product[] newArray(int size) {
            return new Product[size];
        }
    };
}

this is my adapter product


import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;

import java.util.ArrayList;

public class productAdapter extends RecyclerView.Adapter<productAdapter.productViewHolder> {

    private ArrayList<Product> listProduct;

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    private Context context;

    public productAdapter(ArrayList<Product> listProduct) {
        this.listProduct = listProduct;
    }

    @NonNull
    @Override
    public productViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_product, viewGroup, false);
        return new productViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final productViewHolder holder, int position) {

        final Product pd = listProduct.get(position);

        Glide.with(holder.itemView.getContext())
                .load(pd.getPhoto())
                .override(400, 800)
                .fitCenter()
                .into(holder.imgPhoto);

        holder.tvName.setText(pd.getName());
        holder.tvPrice.setText(pd.getPrice());
        holder.tvDetail.setText(pd.getDetail());

        holder.btnDetail.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(holder.itemView.getContext(), "Open details of " + listProduct.get(holder.getAdapterPosition()).getName(), Toast.LENGTH_SHORT).show();
                Intent moveIntent = new Intent(v.getContext(), DetailActivity.class);
                moveIntent.putExtra("img_item_photo",pd.getPhoto());
                moveIntent.putExtra("tv_item_name",pd.getName());
                moveIntent.putExtra("tv_Price",pd.getPrice());
                moveIntent.putExtra("tv_item_detail",pd.getDetail());
                v.getContext().startActivity(moveIntent);

            }
        });

        holder.btnBuy.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

            }
        });
    }

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

    public class productViewHolder extends RecyclerView.ViewHolder {
        ImageView imgPhoto;
        TextView tvName, tvDetail,tvPrice;
        Button btnDetail, btnBuy;

        public productViewHolder(@NonNull View itemView) {
            super(itemView);
            imgPhoto = itemView.findViewById(R.id.img_item_photo);
            tvName = itemView.findViewById(R.id.tv_item_name);
            tvPrice = itemView.findViewById(R.id.tv_Price);
            tvDetail = itemView.findViewById(R.id.tv_item_detail);
            btnDetail = itemView.findViewById(R.id.btn_details);
            btnBuy = itemView.findViewById(R.id.btn_buy);
        }
    }
}

this is my detailView

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

            <ImageView
                android:id="@+id/img_item_photo"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                android:adjustViewBounds="true"
                android:scaleType="fitXY"
                android:src="@drawable/shoes_03" />

        <TextView
            android:id="@+id/tv_item_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="8dp"
            android:layout_toEndOf="@+id/img_item_photo"
            android:layout_toRightOf="@+id/img_item_photo"
            android:textSize="25sp"
            android:textStyle="bold"
            tools:text="@string/product_name" />
        <TextView
            android:id="@+id/tv_Price"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="8dp"
            android:layout_toEndOf="@+id/img_item_photo"
            android:layout_toRightOf="@+id/img_item_photo"
            android:textSize="20sp"
            android:textStyle="bold"
            tools:text="@string/product_price" />

        <TextView
            android:id="@+id/tv_item_detail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="8dp"
            android:layout_toEndOf="@+id/img_item_photo"
            android:layout_toRightOf="@+id/img_item_photo"
            android:textSize="16sp"
            android:textStyle="bold"
            tools:text="@string/detail" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp">

        </RelativeLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            android:id="@+id/btn_buy" />
    </LinearLayout>
</ScrollView>

and this is my detailActivity


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class DetailActivity extends AppCompatActivity {

    ImageView imgPhoto;
    TextView tvName, tvDetail,tvPrice;

    String productName,productDetail,productPrice;
    int imgproduct;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        imgPhoto = findViewById(R.id.img_item_photo);
        tvName = findViewById(R.id.tv_item_name);
        tvPrice = findViewById(R.id.tv_Price);
        tvDetail = findViewById(R.id.tv_item_detail);

        imgproduct = getIntent().getIntExtra("img_item_photo",0);
        productName = getIntent().getStringExtra("tv_item_name");
        productPrice = getIntent().getStringExtra("tv_Price");
        productDetail = getIntent().getStringExtra("tv_item_detail");

        imgPhoto.setImageResource(imgproduct);
        tvName.setText(productName);
        tvPrice.setText(productPrice);
        tvDetail.setText(productDetail);



    }

}

what should I do to handle my problem, do you have some advice? Here my LogCat Details:

2019-09-05 13:07:34.727 16657-16657/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.submission_dicoding, PID: 16657 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.submission_dicoding.productAdapter.onBindViewHolder(productAdapter.java:58) at com.example.submission_dicoding.productAdapter.onBindViewHolder(productAdapter.java:21) at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781) at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823) at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752) at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019) 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:19599) at android.view.ViewGroup.layout(ViewGroup.java:6053) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080) at android.view.View.layout(View.java:19599) at android.view.ViewGroup.layout(ViewGroup.java:6053) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:19599) at android.view.ViewGroup.layout(ViewGroup.java:6053) at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444) at android.view.View.layout(View.java:19599) at android.view.ViewGroup.layout(ViewGroup.java:6053) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:19599) at android.view.ViewGroup.layout(ViewGroup.java:6053) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635) at android.widget.LinearLayout.onLayout(LinearLayout.java:1544) at android.view.View.layout(View.java:19599) at android.view.ViewGroup.layout(ViewGroup.java:6053) 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:767) at android.view.View.layout(View.java:19599) at android.view.ViewGroup.layout(ViewGroup.java:6053) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2488) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2204) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1390) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6754) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966) at android.view.Choreographer.doCallbacks(Choreographer.java:778) at android.view.Choreographer.doFrame(Choreographer.java:713) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:251) at android.app.ActivityThread.main(ActivityThread.java:6572) 2019-09-05 13:07:34.727 16657-16657/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
  • 2
    https://stackoverflow.com/help/minimal-reproducible-example – Pochmurnik Sep 05 '19 at 06:22
  • The stacktrace from logcat states that a NullPointerException has occurred at line 58 of the adapter. One of the textViews you use setText on, is null. – tomtzook Sep 05 '19 at 06:24

1 Answers1

0

It says the problem in the error log.

Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

Something here is null, line 58

holder.tvName.setText(pd.getName());
holder.tvPrice.setText(pd.getPrice());
holder.tvDetail.setText(pd.getDetail());
Mansur
  • 1,622
  • 14
  • 27