Ошибка после обновления версии targetSDK - ListView не работает: метод интерфейса 'int java.util.List.size ()' для ссылки на пустой объект - PullRequest
0 голосов
/ 28 октября 2018

У меня есть приложение NameDay в App Store, которое использовало Android SDK <26.Так как Google хочет, чтобы каждое приложение изменило свой TargetSDK по крайней мере на 26, чтобы продолжать обновляться, я хотел изменить свое приложение, чтобы удовлетворить потребности Google. </p>

Изменил соответствующие поля, касающиеся SDK,но теперь у меня происходит сбой при попытке запустить приложение в эмуляторе.

App MainActivity: Основная активность приложения ищет базу данных и получает все имена, которые отмечают сегодня ипоказывает им.Ниже этого текстового представления у меня есть просмотр списка, который сравнивает имена, которые отмечают сегодня, с вашими контактами, и показывает контакты, отмечающие их день имени, чтобы иметь возможность позвонить или отправить смс.

Я получаю ошибку:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.duk3r.eortologio2, PID: 9577
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
    at com.duk3r.eortologio2.LazyAdapter.getCount(LazyAdapter.java:32)
    at android.widget.AdapterView$AdapterDataSetObserver.onChanged(AdapterView.java:836)
    at android.widget.AbsListView$AdapterDataSetObserver.onChanged(AbsListView.java:6414)
    at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
    at android.widget.BaseAdapter.notifyDataSetChanged(BaseAdapter.java:50)
    at com.duk3r.eortologio2.LazyAdapter.setItems(LazyAdapter.java:45)
    at com.duk3r.eortologio2.MainActivity$LoadItemsTask.onPostExecute(MainActivity.java:498)
    at com.duk3r.eortologio2.MainActivity$LoadItemsTask.onPostExecute(MainActivity.java:480)
    at android.os.AsyncTask.finish(AsyncTask.java:695)
    at android.os.AsyncTask.-wrap1(Unknown Source:0)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Основные файлы, которые появляются в сообщениях об ошибках:

MainActivity.java

и LazyAdapter.java

Я читаю подобные посты здесь, в StackOverflow, и они говорят, что getCount () возвращает null и вылетает из приложения.Дело в том, что я не менял код и не касался адаптеров и / или основной деятельности, а приложение работало раньше.Изменил ли Google что-то в последних SDK?

Заранее спасибо.

Обновление: приложение отлично работает с targetSDK 27 в эмуляторе с API 23, просто попробовал еще раз.Когда я переключаюсь на эмулятор с SDK> 26, он вылетает при запуске, когда пытается проверить код просмотра списка.

1 Ответ

0 голосов
/ 02 ноября 2018

Кажется, что проблема заключалась в том, что начиная с API 23 и далее, заявленные разрешения в манифесте Android на самом деле не имеют значения. Вы должны спросить разрешения на лету, если вы хотите, чтобы он работал на API> 23.

Сделано это работает с этим:

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {

    if (checkSelfPermission(Manifest.permission.READ_CONTACTS) ==
        PackageManager.PERMISSION_GRANTED) {
    System.out.println("Permission Granted");
    } else {
    ActivityCompat.requestPermissions(MainActivity.this,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    }
}

Вы должны запрашивать каждое разрешение, которое вам нужно отдельно, чтобы приложение продолжало работать без проблем.

...