Почему я не могу использовать ресурсы.getSystem () без ошибки выполнения?
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.содержание.res.Resources$NotFoundException: строка ID ресурса #0x7f040003
код, который вызывает ошибку, - это одна строка внутри createProfileTable, в частности,ресурсы.getSystem().метода getString(Р. строкой.create_profile_table_sql) если я использую переменную класса для хранения контекста и делаю контексте.метода getString(Р. строкой.create_profile_table_sql) Я не получаю никаких ошибок, но я не хочу этого делать, потому что я хочу избежать утечек памяти и в соответствии с тем, что я знаю, это должно работать. Есть идеи, что происходит?
3 ответов
согласно документации Android, Resources.getSystem()
предоставляет только ресурсы системного уровня, а не на уровне приложения (например, ресурсы внутри ваших строк.XML-файл.)
http://developer.android.com/reference/android/content/res/Resources.html#getSystem()
попробуйте использовать контекст приложения, если вы действительно хотите восстановить ваши строки таким образом, или принять мое предложение в комментарии к вашему вопросу.
Использование Ресурсов.getSystem().getWhatEver () вы можете получить доступ только к общесистемным ресурсам (вы получаете ошибку, потому что нет общесистемного ресурса с вашим идентификатором). Поскольку идентификатор ресурса не является уникальным для всех приложений, вам необходимо предоставить приложение при доступе к ресурсу. В Android это делается с помощью контекста. Поэтому, если вы хотите получить доступ к некоторому ресурсу, вам нужно использовать его следующим образом
context.getResource().getString(myID);
кроме того, что комментарий Брэндона верен.
вы можете получить параметр контекста в функции по параметру, или по статической переменной, или по .