【问题标题】:Get a long array from an xml resource in Android program从Android程序中的xml资源中获取一个长数组
【发布时间】:2016-08-16 18:46:39
【问题描述】:

为了构建振动模式,我尝试在 XML 中定义数据数组。

<string-array name="tab_bip_1">
    <item>0</item>
    <item>100</item>
    <item>100</item>
</string-array>

    Resources r = getResources();
    long[]tab_vibrate = r.getIntArray(R.array.tab_bip_1); // Not correct...
    Vib.vibrate(tab_vibrate, 0);

但要获取值数组,似乎只能使用 getIntArray() ,它给出一个 Int 数组,当 vibrate 需要一个长数组时。 有没有一种“getLongArray()”方法? 还是我必须在字符串中获取数据然后循环以针对每个值执行 long.parseLong()?

谢谢

【问题讨论】:

  • 您需要手动将long[] 复制到int[] :(

标签: android arrays xml


【解决方案1】:
<string-array name="tab_bip_1">
    <item>0</item>
    <item>100</item>
    <item>100</item>
</string-array>

您正在尝试获取 IntArray,但这是一个字符串数组。试试这个:

<integer-array name="tab_bip_1">
    <item>0</item>
    <item>100</item>
    <item>100</item>
</integer-array>

并将long替换为int,因为它只是整数数组。

【讨论】:

    【解决方案2】:

    除了我们在Android中拥有的string资源外,我们还有以下资源:https://developer.android.com/guide/topics/resources/more-resources.html

    如您所见,没有long 类型的xml 资源。数字类资源需要使用integer

    【讨论】:

      【解决方案3】:

      感谢您的回答。在这种情况下,使用 int 数组可能就足够了,但最后我需要转换值,因为 Vibrate 不需要 Int 数组而是 Long 数组。 :(

      此外,只有当您的值低于 32 位时,才可以在 XML 中使用和 Int 数组。如果我们有一个值大于 32 位的 XML 文件,不确定 getIntArray() 会说什么。

      我解决了我的问题循环和转换字符串长这样:

       <string-array name="tab_bip_1">
          <item>0</item>
          <item>1000</item>
          <item>2000</item>
      </string-array>
      
      
          // Get vibration array, which is in String
          Resources r = getResources();
          String[]str_tab_vibrate = r.getStringArray(R.array.tab_bip_1);
      
          // Then loop around to transforme in long values
          long[] long_tab_vibrate = new long[str_tab_vibrate.length];
          for (int i = 0; i < str_tab_vibrate.length; i++) {
              long_tab_vibrate[i] = Long.parseLong(str_tab_vibrate[i]);
          }
      
         // Then, vibrate
          Vibrator Vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
          Vib.vibrate(long_tab_vibrate, 0);
      

      它有效。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-01-05
        • 1970-01-01
        • 2018-10-18
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        相关资源
        最近更新 更多