Почему я не могу использовать ресурсы.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);

кроме того, что комментарий Брэндона верен.


вы можете получить параметр контекста в функции по параметру, или по статической переменной, или по .