2011-03-08 10 views
0

AndroidとJavaの新機能ですが、プログラミングの経験があります。 Android/Javaの奇妙な文字列の振る舞い

私は、Androidに次のように開始したい

、それがクラッシュします:

package org.ds.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Test extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Toast.makeText(this, 
       getResources().getStringArray(R.array.test_array).length, 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

は、私にはわからない、なぜアプリがクラッシュするが、配列が値の文字列配列として定義されている/ arrays.xml 6項目あります。 R.javaでもすべて正しいです。配列はそこに定義されています。

私はそれが動作する次のようにします。私は最初の変数に長さを呼び出し、私が望んでいたように、その後さらに長さを呼び出すとき

package org.ds.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Test extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     int arr_length = getResources().getStringArray(R.array.test_array).length; 

     Toast.makeText(this, 
       "array has a length of " + arr_length + " " + getResources().getStringArray(R.array.test_array).length, 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

、なぜそれが動作しますか? Androidのレベルは8/2.2です それは私には意味がありませんので、おそらくあなたの一人が手がかりを持っています。

答えて

1

あなたがテキストとして番号(int型)ではない文字列を渡している、これは一つの解決策である:

String.valueOf(getResources().getStringArray(R.array.test_array).length) 

編集: あなたが追加することにより、数値を文字列にキャストしているとあなたの第二の例は動作しますそれは文字列 "配列に長さ"を持っています。

+0

これはすべてのJava開発者にとって古くからの問題です。誰もがこの問題を何度か持っていました。 –

+0

ああ、そうです。あなたはひどく複雑であるように見える問題を検索すると、最も簡単な可能性を見落とします。 – Morv

+0

@DaysShadow回答を受け入れたものとしてマークすることを忘れないでください。まだできなかったら私の謝罪。 – Klaus