Почему я не могу использовать Resources.getSystem () без ошибки времени выполнения? - PullRequest
9 голосов
/ 14 января 2012
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: строковый ресурсID # 0x7f040003

Код, который вызывает ошибку, - это, в частности, одна строка внутри createProfileTable, Resources.getSystem (). GetString (R.string.create_profile_table_sql) , если я используюпеременная класса для хранения контекста и выполнения context.getString (R.string.create_profile_table_sql) Я не получаю никаких ошибок, но не хочу этого делать, потому что хочу избежать утечек памяти и, согласночто я знаю, это должно работать.Есть идеи, что происходит?

Ответы [ 3 ]

25 голосов
/ 14 января 2012

Согласно документации Android, Resources.getSystem() предоставляет только ресурсы системного уровня, но не ресурсы уровня приложения (например, ресурсы внутри файла strings.xml).

http://developer.android.com/reference/android/content/res/Resources.html#getSystem()

Попробуйте использовать контекст приложения, если вы действительно хотите извлечь свои строки таким образом, или примите мое предложение в комментарии к вашему вопросу.

5 голосов
/ 14 января 2012

Используя Resources.getSystem (). GetWhatEver () вы можете получить доступ только к общесистемным ресурсам (вы получаете ошибку, потому что нет общесистемного ресурса с вашим ID). Поскольку идентификатор ресурса не является уникальным для разных приложений, вам необходимо предоставить приложение при доступе к ресурсу. В Android это делается с помощью Context. Поэтому, если вы хотите получить доступ к какому-либо ресурсу, вам нужно использовать его следующим образом

context.getResources().getString(myID);

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

0 голосов
/ 15 января 2012

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

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