2016-08-16 6 views
1

振動パターンを構築するために、データ配列をXMLで定義しようとしました。バイブレーションが長い列を必要とするint配列を、与えるAndroidプログラムの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を(使用する場合のみ可能のようです)。 「getLongArray()」メソッドの種類はありますか? または、各値に対してlong.parseLong()を実行するために、文字列でデータを取得してループする必要がありますか?

おかげ

+0

あなたは手動で '長い[]' [INT 'にコピーする必要があります。 ] ':( –

答えて

0
<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> 

そして、それはちょうど、整数配列であるので、intlongを交換してください。私たちは、Androidを持っているstringリソース以外

0

回答ありがとうございます。この場合、int配列を使うだけで十分ですが、最後には値を変換する必要があります.VibrateはInt配列を必要とせず、Lo​​ng配列を必要とします。 :(

はまた、XMLの配列を使用してのIntすることで、32ビットよりも低い値を持っている場合にのみOKです。何getIntArray()のわからない私たちは、32ビットを超える値を持つXMLファイルを持っている場合は言うだろう。

私はこのように長いに文字列をループし、キャスト私の問題を解決:。

<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); 

それが動作する、これが役立つことを願っています

関連する問題