Работая в мире приветствия android, я добавил несколько строк в файл ресурсов strings.xml. Затем я попытался установить переменную-член моего основного класса активности на значение одной из строк:
public class MyActivity extends Activity {
/** Called when the activity is first created. */
public String myString = getString(R.string.MY_STRING); // compiles, but crashes
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(myString);
setContentView(tv);
}
}
Когда он сбой, я получаю это в logcat: Невозможно создать экземпляр активности ComponentInfo {com.myclass}: java.lang.NullPointerException
Итак, я делаю это неправильно или это ожидаемое поведение? Оглядываясь на документацию, я не вижу ничего, что могло бы заставить меня думать, что ресурсы будут недоступны, пока основная деятельность будет строиться.
http://developer.android.com/guide/topics/resources/accessing-resources.html
Тем не менее, я уверен, что это будет работать в других классах - просто не основной класс активности.
Я не думаю, что вы можете вызвать getString в классе Activity, поскольку он, возможно, еще не был правильно инициализирован. Возможно, вам придется разделить объявление (сохранить его как общедоступную String), а затем присваивать (переместить его в onCreate).
public class MyActivity extends Activity {
/** Called when the activity is first created. */
public String myString;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myString = getString(R.string.MY_STRING); // compiles, but crashes
TextView tv = new TextView(this);
tv.setText(myString);
setContentView(tv);
}
}