2013-05-04 2 views
2

Я пытаюсь получить доступ к метаданным для активности из файла манифеста.Метаданные Android с файлом манифеста - nullPointerException

манифеста выглядит следующим образом:

<activity 
     android:name="co.uk.benbun.nvrrclubapp.MainActivity" 
     android:label="@string/app_name" > 
     <meta-data android:value="newstag" android:name="NEWS"></meta-data> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Код для доступа к нему, выглядит следующим образом:

try { 
     ApplicationInfo ai = getPackageManager().getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA); 
     Bundle bundle = ai.metaData; 
     String myApiKey = bundle.getString("NEWS"); 
    } catch (NameNotFoundException e) { 
     Log.e("metadata", "Failed to load meta-data, NameNotFound: " + e.getMessage()); 
     feedTag = "NEWS"; 
    } catch (NullPointerException e) { 
     Log.e("metadata", "Failed to load meta-data, NullPointer: " + e.getMessage()); 
     feedTag = "NEWS"; 
    } 

Когда я выполняю код, который я всегда получаю NullPointerException.

Что я делаю неправильно?

+0

stacktrace от logcat пожалуйста? –

ответ

1

documentation для PackageManager.GET_META_DATA говорит:

ComponentInfo флаг: вернуть Связки метаданных, которые связан с компонентом. Это применимо для любого API, возвращающего подкласс ComponentInfo.

Вы звоните getApplicationInfo(), который возвращает объект ApplicationInfo. ApplicationInfo не наследует от ComponentInfo, поэтому у этого объекта не будет метаданных. Вам необходимо получить ActivityInfo для вашего MainActivity, чтобы получить метаданные (ActivityInfo является подклассм ComponentInfo).

+0

Несмотря на то, что в документации явно указано, что это только для элементов ComponentInfo, похоже, что без нее пакет метаданных ApplicationInfo имеет значение NULL. – shortstuffsushi

Смежные вопросы