【问题标题】:Int from value of a String in android来自android中String的值的Int
【发布时间】:2016-05-01 02:03:47
【问题描述】:

我有

String[] x1 = new String[] { "05:30", "07:20", "13:30", "21:30"};
String[] x2 = new String[] { "08:30", "01:20"}; 
String[] x3 = new String[] { "12:30", "00:20", "13:54"}; 

我从数据库中收到 x1 或 x2 或 x3 名称。

String get_x = null;
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
    do {
        get_x = cursor.getString(0); // get_x will have value x1 or x2 or x3
    } while (cursor.moveToNext());
}

然后我想得到返回的 x[1 or 2 or 3] 的大小 例如。 int size = x1.length,其中 x1 是 get_x 字符串的值。

我试过了

int size = get_x.length; 

但不工作。 'size' 将等于 get_x 的长度,而不是 x1.length 的长度

【问题讨论】:

  • 什么是get_x?您将其定义为 String,因此 String.valueOf 似乎是多余的。
  • String get_x = new String();是多余的; "new String()" 将被回收,因为 get_x 仅分配在下面几行。
  • 我编辑了但还是不行。
  • 大小是什么意思?你想知道你的数组中有多少个值?就像在 x1 中你有 4 个?
  • @Roman Rozenshtein,是的,完全正确。

标签: android


【解决方案1】:

听起来您需要为您的程序使用更合适的数据结构。您有多种选择:

  1. 将值直接存储在数据库中,而不是将值存储为值的“索引”。
  2. 更改您的数据库以返回int 值(例如1、2 或3)而不是String(例如"x1""x2""x3")并使用数组或@987654328 @ 而不是三个单独的变量。数据库中的 int 值将充当数组或 List 的索引。
  3. 保持数据库不变并使用Map 而不是三个不同的变量。现在您可以使用数据库中的值作为您的Map 的索引。

以下有关 Stack Overflow 的问题与您的问题有关:

Is it possible to create variables at runtime in Java?

How to create a variable with a user-defined name in Java?

【讨论】:

    【解决方案2】:

    这是使用反射的答案:)。 将 get_x 传递给方法。 "YourClassName" - 是您的活动(或托管您的代码的类)的名称,替换它。

                public void getSize(String arrayParamName){
                    Field[] fields = YourClassName.class.getDeclaredFields();
    
                    for (Field field : fields) {
    
                        //gives the names of the fields
                        if(field.getName().equals(arrayParamName)) {
                            System.out.println(field.getName());
                            try {
    
                                String[] returnedArrayFromDB = (String[])field.get(CameraActivity.this);
                                System.out.println("length of " +field.getName() + ":  "+ returnedArrayFromDB.length);
                                System.out.println("first value of array " +returnedArrayFromDB[0]);
    
    
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
    

    【讨论】:

    • 非常感谢。还有一个问题,是否可以使用 for 从 x1 读取值?例如for (int i=0; i
    • 查看编辑版本。将字段转换为 String[] 后,您可以照常使用它。
    • 话虽如此,我很高兴它确实解决了您的问题,我鼓励您在未来使用 Code-Apprentice 所写的不同方法。简而言之,它可以做到,但反射不是你想在这些情况下使用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多