Странное NullPointerException - PullRequest
       17

Странное NullPointerException

1 голос
/ 07 июня 2011

У меня странная проблема ...

Мой файл strings.xml содержит:

<?xml version="1.0" encoding="utf-8?>
<resources>
    <string name="building_name">My House</string>
</resources>

Ну, мой R содержит:

[...]
public static final class String {
    public static final int building_name=0x7f02383;
}
[...]

Итак, когдаЯ пытаюсь вызвать эту строку в своем коде следующим образом:

private final String BUILDING_NAME = getString(R.string.building_name);

У меня есть эта ошибка:

java.lang.RuntimeException: Unable to instanciate activity ComponentInfo{...}:          java.lang.NullPointerException
{...}
  caused by: java.lang.NullPointerException

в {строке, где я создаю имя_стройки}

Что не так с моим кодом? Пожалуйста, помогите

Ответы [ 3 ]

9 голосов
/ 07 июня 2011

Вы не можете позвонить getString, пока ваша активность не будет инициализирована.Это потому, что getString совпадает с context.getResources().getString().И контекст не инициализирован.

Таким образом, в принципе, вы не можете назначать значение статическим переменным таким образом.

Но есть способ использовать строки ресурсов в ваших статических переменных.Для этого создайте свое приложение (см. this и this ), а затем получите оттуда контекст.Вот краткий пример:

<manifest ...>
    ...
    <application  android:name="com.mypackage.MyApplication" ... >
       ...
    </application>
    ...
</manifest>

Затем создайте MyApplication.java файл:

public class MyApplication extends Application 
{   
    private static MyApplication s_instance;

    public MyApplication ()
    {
        s_instance = this;
    }

    public static Context getContext()
    {
        return s_instance;
    }

    public static String getString(int resId)
    {
        return getContext().getString(resId);       
    }
}

И затем используйте его для получения строкового ресурса:

private final String BUILDING_NAME = MyApplication.getString(R.string.building_name);

YouМожно даже сделать это пихтом статических полей.

2 голосов
/ 07 июня 2011

В некоторых случаях это происходит, для того же вам следует попробовать выполнить следующие шаги:

  1. Попробуйте очистить свой проект.
  2. Проверьте, импортирован ли файл класса android.R или нет, если он импортирован, удалите его и импортируйте файл класса R.
  3. Попробуйте использовать метод getResources (). GetString (R.string.myString).
2 голосов
/ 07 июня 2011

Использование этого может помочь вам

getResources().getString(R.string.building_name);

Это работает для меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...