更新targetSDK版本后出错-ListView不起作用:空对象引用上的接口方法'int java.util.List.size()'

时间:2018-10-28 20:05:35

标签: android listview android-arrayadapter

我在App Store中有一个使用Android SDK <26的NameDay应用程序。由于Google希望使每个应用程序将其TargetSDK至少更改为26,以便继续进行更新,因此我想更改自己的应用程序,以满足Google的需求。

更改了有关SDK的适当字段,但是现在当我尝试在模拟器中运行应用程序时会崩溃。

应用程序主要活动: 该应用程序的主要活动是搜索数据库,并获取今天庆祝的所有名称并显示它们。在该文本视图下方,我有一个列表视图,该列表视图将今天庆祝的名字与您的联系人进行比较,并显示庆祝其名字的联系人,以便能够呼叫或发送短信。

我得到的错误是:

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中进行了更改吗?

谢谢。

更新:该应用程序在具有API 23的仿真器中与targetSDK 27配合良好,只需再次尝试即可。当我切换到SDK> 26的仿真器时,尝试检查listview代码时,它在启动时崩溃。

1 个答案:

答案 0 :(得分:0)

问题似乎出在API 23及更高版本中,Android Manifest中声明的权限并不重要。如果您希望它在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);

    }
}

您必须分别请求所需的每个权限,这样应用程序才能正常运行。