1

I have a function like this

  private void goToSalesActList(View view) {
    CustomerActivity ca = (CustomerActivity)view.getTag();
    Intent intent = new Intent(this, SalesActListActivity.class);
    Bundle bundle = new Bundle();
    bundle.putParcelable(Const.OBJ_USER, user);
    bundle.putParcelable("CustomerListActivity", ca);
    intent.putExtras(bundle);
    startActivity(intent);
  }

i have an error like at blockquote on that line

java.lang.ClassCastException: com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder cannot be cast to com.kreators.nvmobile.dashboard.SalesActActivity$CustomerActivity

CustomerActivity ca = (CustomerActivity)view.getTag();

Simply, I want to parcelable some data on my class function CustomerActivity to intent SalesActListActivity but i have error like this. Can anyone help me ? At least, here is my CustomerActivity function

static class CustomerActivity implements Parcelable {
public int id, qty, AROD, HAVE, Visit;
public String code, name, sales, salesname, target, amt, psi;

public CustomerActivity(JSONObject o) {
  try {
    id = o.getInt("CustId");
    code = o.getString("CustCode");
    name = o.getString("CustDesc");
    salesname = o.getString("Salesname");
    sales = o.getString("Sales");
    target = o.getString("SITarget");
    amt = o.getString("SIAmt");
    psi = o.getString("persenPSI");
    qty = o.getInt("SOQty");
    AROD= o.getInt("AROD");
    HAVE= o.getInt("HAVE");
    Visit= o.getInt("Visit");
  } catch (JSONException e) {}
}

protected CustomerActivity(Parcel in) {
  id = in.readInt();
  qty = in.readInt();
  code = in.readString();
  name = in.readString();
  salesname = in.readString();
  sales = in.readString();
  target = in.readString();
  amt = in.readString();
  psi = in.readString();
  AROD = in.readInt();
  HAVE = in.readInt();
  Visit = in.readInt();
}

public static final Creator<CustomerActivity> CREATOR = new Creator<CustomerActivity>() {
  @Override
  public CustomerActivity createFromParcel(Parcel in) {
    return new CustomerActivity(in);
  }

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

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

@Override
public void writeToParcel(Parcel parcel, int i) {
  parcel.writeInt(id);
  parcel.writeInt(qty);
  parcel.writeString(code);
  parcel.writeString(name);
  parcel.writeString(salesname);
  parcel.writeString(sales);
  parcel.writeString(target);
  parcel.writeString(amt);
  parcel.writeString(psi);
  parcel.writeInt(AROD);
  parcel.writeInt(HAVE);
  parcel.writeInt(Visit);
}

}

java.lang.ClassCastException: com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder cannot be cast to com.kreators.nvmobile.dashboard.SalesActActivity$CustomerActivity at com.kreators.nvmobile.dashboard.SalesActActivity.goToSalesActList(SalesActActivity.java:210) at com.kreators.nvmobile.dashboard.SalesActActivity.access$000(SalesActActivity.java:33) at com.kreators.nvmobile.dashboard.SalesActActivity$1.onItemClick(SalesActActivity.java:256) at android.widget.AdapterView.performItemClick(AdapterView.java:305) at android.widget.AbsListView.performItemClick(AbsListView.java:1146) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053) at android.widget.AbsListView$3.run(AbsListView.java:3865) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5345) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:947) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)

that is my error message

Sorry my grammar is bad and I'm newbie 谢谢

4
  • where are you setting the tag for that view? Commented Mar 5, 2018 at 18:36
  • when I click a list view, I set that tag for read to the next intent Commented Mar 6, 2018 at 3:41
  • Also, the method is VERY wrong :-( You can not put an Activity in the Bundle. What are you trying to achieve with this code? Commented Mar 6, 2018 at 8:52
  • i update my question Commented Mar 6, 2018 at 8:59

2 Answers 2

1

Replace

CustomerActivity ca = (CustomerActivity)view.getTag();

with

CustomerActivity ca = (CustomerActivity)view.getContext();

In Android every View instance, once created, has access to it's Context, which in most cases* will be an Activity.

*sometimes this will be the Application or another implementation of Context.

Sign up to request clarification or add additional context in comments.

5 Comments

cannot resolve method getActivity() why can like that ? Thanks
Oh, sorry. It must be getContext(), not getActivity(). Updated the answer :-)
Inconvertible type, cannot cast context to CustomerActivity Still error. Thanks
how to implementation to the context ?
I not use context and cannot convert to context
0

The following error:

java.lang.ClassCastException: com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder cannot be cast to com.kreators.nvmobile.dashboard.SalesActActivity$CustomerActivity

is happened because you're trying to cast ViewHolder to CustomerActivity object with:

private void goToSalesActList(View view) {
  CustomerActivity ca = (CustomerActivity)view.getTag();
  ...
}

From you comment:

when I click a list view, I set that tag for read to the next intent

you need to set the object with setTag to your clicked item view something like this:

// selected item view
View view;
...
CustomerActivity selectedItem;
...
view.setTag(selectedItem);

// Then you can call the method with item
goToSalesActList(view);

The above code is only a pseudo code because I can't determine what you're code doing without you giving your Adapter class code.


Side note:
You need to follow a naming convention for Android project. For example, using CustomerActivity name for a pojo is discourage because Android developer usually think every class name ending with Activity is an Activity

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.