最好对多个字符串使用相同的数组索引

时间:2014-01-27 16:11:53

标签: android arrays

我的头衔可能看起来有点不合适,但我真的不知道如何制定这个问题。

基本上我有一个包含三列的数据库,其中包含文本字段。

我想从单个列中提取所有值,并将它们分组为一个巨大的字符串,同时用\ n分隔它们。

最后三个字符串应存储在单个String数组中。 所以我决定使用三个列名查询DB并遍历整个表:

    String[] columns = new String[] {KEY_DESCRIPTION, KEY_REPS, KEY_WEIGHT};
    Cursor c = sqlDB.query(DATABASE_TABLE, columns, null, null, null, null, null);
    String result[] = new String[3];

    int iDesc = c.getColumnIndex(KEY_DESCRIPTION);
    int iReps = c.getColumnIndex(KEY_REPS);
    int iWeight = c.getColumnIndex(KEY_WEIGHT);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())  //loop thru 
    {
        result[0] = result[0] + c.getString(iDesc) + "\n";
        result[1] = result[1] + c.getString(iReps) + "\n";
        result[2] = result[2] + c.getString(iWeight) + "\n";
    }       

    return result;

我之前使用类似的方法来连接所有三个字符串,但现在我需要在这三个值之间进行某种分离。

检索值后,我想将它们分别插入到Android TextViews中:

  

TextView1.setText(串[0]);

     

TextView2.setText(串[1]);

     

TextView3.setText(字符串[2]);

所以我的实际问题是我应该继续使用它还是应该选择其他方式,例如每个字符串一个数组列表等等?

2 个答案:

答案 0 :(得分:0)

你可以编写一个小的(私有内部)类来保存这三个字符串并给它们一个有意义的名字。有可能当你回到你的代码时,你将不记得索引的含义:

class Data{
  public String description = "";
  public String reps = "";
  public String weight = "";
}

现在,您可以写下这样的内容:

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
  result.desciption += c.getString(iDesc) + "\n";
  result.reps       += c.getString(iReps) + "\n";
  result.weight     += c.getString(iWeight) + "\n";
}
// ...
TextView1.setText(result.description);
TextView2.setText(result.reps);
TextView3.setText(result.weight);

关于效率的一句话:连接这样的字符串非常慢。您需要使用StringBuilder代替。请参阅:Is string concatenaion really that slow?

答案 1 :(得分:0)

我的建议是停止使用Arrays(如[]中所示)并尽可能移至ArrayList。由于ArrayList是动态的,您可以继续添加数据。因此不需要使用/ n分开。将结果更改为2维ArrayList或为每列创建3个单独的ArrayList。然后像

ResultsIdesc.add(c.getString(iDesc));
ResultsiReps.add(c.getString(iReps));

这样可以更轻松地将每个文字写入文本视图。