当前位置: 首页 > 知识库问答 >
问题:

JAVAlang.ClassCastException适配器强制转换到活动

邓禄
2023-03-14

我有一个这样的函数

  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);
  }

我在那行有个错误,比如在blockquote

java.lang.ClassCast异常:com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder不能强制转换为com.kreators.nvmobile.dashboard.SalesActActActive$CustomActiveS

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

简单地说,我想把我的类函数CustomerActivity上的一些数据打包到intent SalesActListActivity,但我有这样的错误。有人能帮我吗?至少,这是我的CustomerActivity函数

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.类异常:com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder不能被强制转换为com.kreators.nvmobile.dashboard.SalesActActActActivity.goToSalesActList(SalesActActivity.java:210)在com.kreators.nvmobile.dashboard.SalesActAcom.kreators.nvmobile.dashboard.SalesActActivity.access0美元(SalesActActivity.java:33)在com.kreators.nvmobile.dashboard.SalesActActive$1.on项目点击(SalesActActivity.java:256)在android.widget.AdapterView.perform项目点击(AdapterView.java:305)在android.widget.AbsListView.perform项目点击(AbsListView.java:1146)在android.widget.AbsListView$PerformClick.run(AbsListView. java: 3053)在android. netget。AbsListView3 Dollars. run(AbsListView. java: 3865)在android. os. Handler. handleCallback(Handler. java: 739)在android. os. Handler.调度消息(Handler. java: 95)在android. os. Looper. Loop(Looper. java: 135)在android. app. ActivityThread. main(ActivityThread. java: 5345)在java. lang. reect。方法。调用(本机方法)在java. lang. reect。方法。调用(方法。java: 372)在com. android. interal. os。ZygoteInit$MEodAndArgsCaller. run(ZygoteInit. java: 947)在com. android. interal. os。ZygoteInit. main(ZygoteInit. java: 742)

那是我的错误信息

对不起,我的语法不好,我是新手谢谢

共有2个答案

班昱
2023-03-14

以下错误:

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

是因为您试图将ViewHolder强制转换为CustomerActivity对象:

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

从你的评论来看:

当我单击列表视图时,我将该标记设置为“读取到下一个意图”

您需要将setTag对象设置为单击的项目视图,如下所示:

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

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

上面的代码只是一个伪代码,因为如果没有适配器类代码,我无法确定你在做什么。

旁注:
您需要遵循Android项目的命名约定。例如,不鼓励对pojo使用CustomerActivity名称,因为Android开发者通常认为每个以Activity结尾的类名都是一个活动

章涵容
2023-03-14

代替

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

具有

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

在Android中,每个视图实例一旦创建,就可以访问它的上下文,在大多数情况下,*这将是一个活动

*有时这将是ApplicationContext的另一个实现。

 类似资料:
  • 从上面的标题来看,目前我遇到了一个问题,即无法从一个模型类转换到另一个模型类。我写的代码有问题吗?请随时向我询问更多信息。非常感谢。 我怀疑: 这种方法“selectTheOldFnException”有一些错误,那就是使用了hibernate,但我不确定这个理论。 REST控制器 使用HIBERNATE-MatchingEngine选择POJO。班 POJO班 例外代码

  • 我只想把这个支付成功后的片段称为状态,但我不知道如何让它工作。 出错 PaymentGatWay类 public void onResponse(JSONObject response){log.d(TAG,response.toString()); 输出错误

  • 隐含的强制转换 隐含的 强制转换是指这样的类型转换:它们是隐藏的,由于其他的动作隐含地发生的不明显的副作用。换句话说,任何(对你)不明显的类型转换都是 隐含的强制转换。 虽然 明确的 强制转换的目的很明白,但是这可能 太过 明显 —— 隐含的 强制转换拥有相反的目的:使代码更难理解。 从表面上来看,我相信这就是许多关于强制转换的愤怒的源头。绝大多数关于“JavaScript强制转换”的抱怨实际上都

  • 明确的强制转换 明确的 强制转换指的是明显且明确的类型转换。对于大多数开发者来说,有很多类型转换的用法可以清楚地归类于这种 明确的 强制转换。 我们在这里的目标是,在我们的代码中指明一些模式,在这些模式中我们可以清楚明白地将一个值从一种类型转换至另一种类型,以确保不给未来将读到这段代码的开发者留下任何坑。我们越明确,后来的人就越容易读懂我们的代码,也不必费太多的力气去理解我们的意图。 关于 明确的

  • 强制类型转换 隐式类型转换:隐式类型转换又称为自动类型转换,隐式类型转换可分为三种:算术转换、赋值转换和输出转换。 显式类型转换:显式类型转换又称为强制类型转换,指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,这种类型转换可能会造成数据的精度丢失。 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则

  • 转换值 将一个值从一个类型明确地转换到另一个类型通常称为“类型转换(type casting)”,当这个操作隐含地完成时称为“强制转换(coercion)”(根据一个值如何被使用的规则来强制它变换类型)。 注意: 这可能不明显,但是 JavaScript 强制转换总是得到基本标量值的一种,比如 string、number、或 boolean。没有强制转换可以得到像 object 和 functio