Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Существует специальное широковещательное Намерение, которое нужно назвать каждый раз, когда приложение пишет что-либо новое для Хранилища Медиа:
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE
Широковещательное Намерение включает путь к новому файлу, доступному через Intent.getDataString()
метод.
Для прислушиваний к нему просто создайте BroadcastReceiver
и зарегистрируйте его с помощью IntentFilter
как показано ниже:
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String newFileURL = intent.getDataString();
// TODO React to new Media here.
}
}, new IntentFilter(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE));
Это будет только работать на файлы, вставляемые в одного из Контент-провайдеров Хранилища Медиа. Кроме того, это зависит от приложения, это помещает его там широковещательная передача намерения, которое весь собственный компонент (Google) приложение делают.