【问题标题】:android type mismatch on string sqlite view字符串sqlite视图上的android类型不匹配
【发布时间】:2012-04-13 09:38:03
【问题描述】:

有人知道为什么这会给我的权重错误吗?

错误:

类型不匹配:无法从元素类型 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

任何帮助将不胜感激

【问题讨论】:

    标签: android sqlite list type-mismatch


    【解决方案1】:

    我认为您在迭代权重时出错(使用增强的 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");
        }
    

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

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

    【讨论】:

      【解决方案2】:

      尝试改变你的 for 循环:

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

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

      【讨论】:

      • @TuffyG 参考我的回答:您使用List 类型的变量进行迭代,但是weights 中的元素不是列表,因此会出现错误。
      猜你喜欢
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多