Почему я не могу использовать Resource.getSystem() без ошибки Runtime?
public class BobDatabase extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "bob.db";
private static final int DATABASE_VERSION = 1;
public static final String DEFAULT_PROFILE = "default_profile";
public BobDatabase(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database)
{
createProfileTable(database);
createTimeTable(database);
createEventTable(database);
createLocationTable(database);
}
/**
* Creates a table for Profile objects, executes the string create_profile_table_sql
* contained within strings.xml
* @param database
*/
public void createProfileTable(SQLiteDatabase database)
{
database.execSQL(Resources.getSystem().getString(R.string.create_profile_table_sql));
}}
Я получаю эту ошибку
01-14 12: 20: 57.591: E/AndroidRuntime (1825): вызвано: android.content.res.Resources $NotFoundException: Идентификатор ресурса строки # 0x7f040003
Кодом, вызывающим ошибку, является единственная строка внутри createProfileTable, Resources.getSystem(). getString (R.string.create_profile_table_sql), если я использую переменную класса для хранения Контекста и выполняю context.getString(R.string.create_profile_table_sql) Я не получаю никаких ошибок, но я не хочу этого делать, потому что я хочу избежать утечек памяти и, согласно тому, что знаю, должен работать. Любая идея, что происходит?
Ответы
Ответ 1
Согласно документации Android, Resources.getSystem()
предоставляет только ресурсы на системном уровне, а не на уровне приложений (например, ресурсы внутри файла strings.xml).
http://developer.android.com/reference/android/content/res/Resources.html#getSystem()
Попробуйте использовать контекст приложения, если вы действительно хотите получить ваши строки таким образом, или примите мое предложение в комментарии к вашему вопросу.
Ответ 2
Использование Resource.getSystem(). getWhatEver() позволяет получить доступ только к общесистемным ресурсам (вы получаете сообщение об ошибке, поскольку для вашего идентификатора нет системного ресурса). Поскольку идентификатор ресурса не уникален для всех приложений, вам необходимо предоставить приложение при доступе к ресурсу. В Android это делается с использованием контекста.
Поэтому, если вы хотите получить доступ к некоторому ресурсу, вам нужно использовать его так:
context.getResource().getString(myID);
Кроме того, комментарий Брэндона правильный.
Ответ 3
Вы можете получить параметр param параметра в функции по параметру или статической переменной или с помощью функции getApplicationContext()
.