0

任何人都知道为什么这给我一个重量错误?

错误:

类型不匹配:无法从元素类型 Object 转换为 String

 public void viewWeightHandler(View view) {
    List weights = this.dh.selectAll();
    StringBuilder sb = new StringBuilder();
    sb.append("Previous Weights:\n");
    for (String weight : weights) {
        sb.append(weight + "\n");
    }
    Log.d("WEIGHT", "weight size - " + weights.size());
    output.setText(sb.toString());
}

输出是显示结果的文本视图

重量是用户输入的

weights 是生成的列表。

据我所知,上面应该循环,并且对于每个权重,它应该将其插入权重并显示(如果输入为 1、22、3)

1

22

3

任何帮助,将不胜感激

4

2 回答 2

2

我认为您在迭代权重时出错(使用增强的 for 循环):

  for (List weight : weights) {
      sb.append(weight + "\n");
  }

以这种方式声明它意味着权重的每个元素都应该是列表(因此迭代变量也是列表)。但是,我认为情况并非如此。我不完全知道列表存储什么样的元素,我假设它是String

    List<String> weights =      this.dh.selectAll();
    StringBuilder sb = new StringBuilder();
    sb.append("Previous Weights:\n");
    for (String weight : weights) {
        sb.append(weight + "\n");
    }

使用原始类型是非常糟糕的做法,没有泛型参数,它更难理解,禁用内容辅助并可能导致像你这样的错误(因此我添加了<String>.

但是,我正在纠正的错误不会导致编译错误,而是ClassCastException在运行时。

于 2012-04-13T09:43:57.133 回答
1

尝试更改您的 for 循环:

for (Object weight : weights) {
    sb.append(weight.toString() + "\n");
}

问题是您将权重作为 type 从数据库中取出Object。但是你不能在不先进行某种类型转换的情况下将Objects 视为s。String

于 2012-04-13T09:44:42.323 回答