我在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)
出现在错误消息中的主要文件是:
我在StackOverflow上读过类似的文章,他们说getCount()返回null并使应用程序崩溃。事实是,我没有更改和编码有关适配器或/和主要活动的代码,并且该应用程序之前一直在运行。 Google在最新的SDK中进行了更改吗?
谢谢。
更新:该应用程序在具有API 23的仿真器中与targetSDK 27配合良好,只需再次尝试即可。当我切换到SDK> 26的仿真器时,尝试检查listview代码时,它在启动时崩溃。
答案 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);
}
}
您必须分别请求所需的每个权限,这样应用程序才能正常运行。