简体   繁体   中英

I can not pass data from Recyclerview to another activity

program crashed. and I get this message:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.mob3000.group11.Cars.getImgurl()' on a null object reference at com.mob3000.group11.Reservation.onCreate(Reservation.java:57)

I want to pass info to another activity

#Reservation class

public class Reservation extends AppCompatActivity {

ImageView imgMakeRes;
 TextView pricMakeRes;
TextView brandMakeRes;
TextView girMakeRes;
TextView seatMakeRes;

public static final String BOOKING_INFORMATION= "booking_information";

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

    imgMakeRes = (ImageView) findViewById(R.id.imgMakeReservation);
    pricMakeRes = (TextView) findViewById(R.id.pricMakereservation);
    brandMakeRes = (TextView) findViewById(R.id.brandMakeReservation);
    girMakeRes = (TextView) findViewById(R.id.girMakeReservation);
    seatMakeRes = (TextView) findViewById(R.id.seatMakeReservation);

    Cars cars = getIntent().getParcelableExtra(BOOKING_INFORMATION);

    Glide.with(this).load(cars.getImgurl()).into(imgMakeRes);
    pricMakeRes.setText((int) cars.getPrice());
    brandMakeRes.setText(cars.getBrand());
    girMakeRes.setText(cars.getGir());
    seatMakeRes.setText(cars.getSeats());

Adapter class

public class FirestoreAdapter extends FirestoreRecyclerAdapter<Cars,FirestoreAdapter.myViewHolder> {

private OnListItemClick onListItemClick;
private Context context;
private ArrayList<Cars> listCars;


public FirestoreAdapter(@NonNull FirestoreRecyclerOptions<Cars> options,OnListItemClick onListItemClick) {
    super(options);
    this.onListItemClick=onListItemClick;
}

@Override
protected void onBindViewHolder(@NonNull myViewHolder holder, int position, @NonNull Cars cars) {
    holder.textpri_ce.setText(cars.getPriceWithLabel());
    holder.textbra_nd.setText(cars.getBrand());
    holder.textg_ir.setText(cars.getGir());
    holder.textsea_ts.setText(cars.getSeatsWithLabel());
    Glide.with(holder.img.getContext()).load(cars.getImgurl()).into(holder.img);

}


@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.car_items,
            parent, false);
    return new myViewHolder(view);

}

public class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{

    CircleImageView img;
    TextView textpri_ce,textbra_nd,textg_ir,textsea_ts;

    public myViewHolder( View itemView) {
        super(itemView);
        img = (CircleImageView) itemView.findViewById(R.id.img1);
        textpri_ce= (TextView) itemView.findViewById(R.id.textprice);
        textbra_nd= (TextView)itemView.findViewById(R.id.textbrand);
        textg_ir= (TextView)itemView.findViewById(R.id.textgir);
        textsea_ts= (TextView)itemView.findViewById(R.id.textseats);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        onListItemClick.onItemClick(getItem(getAdapterPosition()),getAdapterPosition());

    }
}
public interface OnListItemClick{

    void onItemClick(Cars snapshot, int position);

}

}

Booking class

public class booking_activity extends AppCompatActivity implements FirestoreAdapter.OnListItemClick{ FirebaseFirestore firebaseFirestore; RecyclerView mFirestoreList;

private ArrayList<Cars> listCars;
Context context;
FirestoreAdapter adapter;
private static final String TAG = "booking_activity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_booking);
    // calling function  adapetWithRecycle() which contains adapter and recycleview----
    adapetWithRecycle();

    //--------------------------------------------------------------------------
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.toolbar_title);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // here we call functions for all the spinners to Find Id and set adapters.
    priceSpinner();
    brandSpinner();
    girSpinner();
    seatsSpinner();
}

// onStop and onStart for recycle view
@Override public void onStart() {
    super.onStart();
    adapter.startListening();
}
@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

protected void adapetWithRecycle() {
    firebaseFirestore = FirebaseFirestore.getInstance();
    mFirestoreList = findViewById(R.id.recview);
    Query query = firebaseFirestore.collection("cars");
    FirestoreRecyclerOptions<Cars> options = new FirestoreRecyclerOptions.Builder<Cars>()
            .setQuery(query, Cars.class)
            .build();
    adapter = new FirestoreAdapter(options,this);
    mFirestoreList.setHasFixedSize(true);
    mFirestoreList.setLayoutManager(new LinearLayoutManager(this));
    mFirestoreList.setAdapter(adapter);
}

@Override
public void onItemClick(Cars snapshot, int position) {
   Intent intent = new Intent(booking_activity.this, Reservation.class);
  // intent.putExtra(Reservation.BOOKING_INFORMATION, listCars.get(position));
    //intent.putExtra(Reservation.BOOKING_INFORMATION, listCars);
    startActivity(intent);

    Log.d("ITEM_CLICK","clicked the item: " + position+ "  Gear is : " + snapshot.getGir()+
            "  Price is:  "+ snapshot.getPrice()+" , Brand is  "+ snapshot.getBrand()+"  ,Seats:  "+
            snapshot.getSeats());



   

inside your onBindViewHolder() in setText() add listcars.get(position).getPriceWithLable() apply it to the rest of your TextViews ex. holder.textpri_ce.setText(listcars.get(position).getPriceWithLable());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM