ClassCastException can not convert long to Object class

Multi tool use
ClassCastException can not convert long to Object class
I am facing a weird problem. I parsed an arraylist from a previous class successfully but while retrieving it in this other class, it throws a exception.
Here is my class:
public class OrderDetailsActivity extends AppCompatActivity {
private Context mContext;
private RecyclerView recyclerView;
private final ThreadLocal<Order> order = new ThreadLocal<Order>();
private Itemitems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_details);
if (getIntent() != null) {
order.set((Order) getIntent().getSerializableExtra(MainActivity.STRING_IMAGE_OBJECT));
}
mContext=OrderDetailsActivity.this;
recyclerView= findViewById(R.id.recycler_view);
RecyclerView.LayoutManager recylerViewLayoutManager = new LinearLayoutManager(mContext);
recyclerView.setLayoutManager(recylerViewLayoutManager);
recyclerView.setAdapter(new OrderDetailsAdapter());
}
public class OrderDetailsAdapter extends RecyclerView.Adapter<OrderDetailsHolder>{
Intent intent = getIntent();
Bundle args = intent.getBundleExtra("BUNDLE");
HashMap<String, Item> map=(HashMap<String, Item>) args.getSerializable("ARRAYLIST");
Collection<Item> values = map.values();
ArrayList<Item>items=new ArrayList<Item>(values);
@NonNull
@Override
public OrderDetailsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.order_item, parent, false);
return new OrderDetailsHolder(layoutView, items);
}
@Override
public void onBindViewHolder(@NonNull OrderDetailsHolder holder, int position) {
Double price = items.get(position).getmPrice();//Error is thrown here
String p = String.valueOf(price);
holder.itemPrice.setText(p);
holder.itemName.setText(items.get(position).getmName());
}
@Override
public int getItemCount() {
return items.size();
}
}
}
It throws this exception in the console:
java.lang.ClassCastException: java.lang.Long cannot be cast to com.leet.wabomba.nairobae.Item
at com.leet.wabomba.nairobae.OrderDetailsActivity$OrderDetailsAdapter.onBindViewHolder(OrderDetailsActivity.java:62)
at com.leet.wabomba.nairobae.OrderDetailsActivity$OrderDetailsAdapter.onBindViewHolder(OrderDetailsActivity.java:47)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)
at android.view.View.layout(View.java:19586)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080)
at android.view.View.layout(View.java:19586)
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:19586)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)
at android.view.View.layout(View.java:19586)
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:19586)
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:19586)
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:758)
at android.view.View.layout(View.java:19586)
at android.view.ViewGroup.layout(ViewGroup.java:6053)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2484)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2200)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
The previous class:
public class OrdersAdapter extends RecyclerView.Adapter<OrderViewHolder>{
ArrayList<Order> orders=new ArrayList<Order>();
ArrayList<ArrayList> items=new ArrayList<ArrayList>();
private ArrayList<Item> item;
public OrdersAdapter(DatabaseReference dr){
dr.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
orders.clear();
items.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Order menu = postSnapshot.getValue(Order.class);
orders.add(menu);
item = (ArrayList<Item>) postSnapshot.child("needs").getValue();
items.add((ArrayList) item);
}
notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public OrderViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.orders, parent, false);
return new OrderViewHolder(layoutView, orders);
}
@Override
public void onBindViewHolder(final OrderViewHolder holder, final int position) {
holder.location.setText(orders.get(position).getLocation());
holder.description.setText(orders.get(position).getDescription());
holder.name.setText(orders.get(position).getName());
holder.phone.setText(orders.get(position).getPhone());
holder.cleared.setVisibility(View.INVISIBLE);
holder.called.setVisibility(View.INVISIBLE);
holder.mLayoutItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.getContext(), OrderDetailsActivity.class);
Bundle args = new Bundle();
args.putSerializable("ARRAYLIST",(Serializable)item.get(position));
intent.putExtra("BUNDLE",args);
MainActivity.getContext().startActivity(intent);
}
});
holder.delivered.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.delivered.setImageResource(R.drawable.deliveredicon);
holder.cleared.setVisibility(View.VISIBLE);
notifyDataSetChanged();
}
});
holder.call.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.called.setVisibility(View.VISIBLE);
}
});
Pretty much what happens is, when i click on a cardview, I want to get the arraylists associated with that position and cast them to a different cardview & class.
}
@Override
public int getItemCount() {
return orders.size();
}
}
I having a hard time pinpointing the problem. Please help.
Long
Item
Item
Long
Am a bit new to android could you please highlight it in code
– Leet
Jul 2 at 18:54
at com.leet.wabomba.nairobae.OrderDetailsActivity$OrderDetailsAdapter.onBindViewHolder(OrderDetailsActivity.java:62)
– M. le Rutte
Jul 2 at 18:55
at com.leet.wabomba.nairobae.OrderDetailsActivity$OrderDetailsAdapter.onBindViewHolder(OrderDetailsActivity.java:62)
@Leet At the end of each line of the exception stack trace you can see file names and line numbers. Find the files that you've written (I assume OrderDetailsActivity.java) and look at the lines specified by the exception. This will help you pinpoint which line the exception is coming from.
– Michael
Jul 2 at 18:58
Sure. Thanks a bunch👊🏾
– Leet
Jul 3 at 4:56
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
You have received an object of the class
Long
and you are trying to assign (cast) it to anItem
. From the quick scan I suspect that the values of your map are not ofItem
but ofLong
.– M. le Rutte
Jul 2 at 18:52