java - ListPreference标记导致我的应用崩溃

标签 java android crash listpreference

我尝试了Java Code Geek的示例代码Android Settings Example

单击设置 float 操作栏时出现问题:应用程序由于以下原因而崩溃:

FATAL EXCEPTION: main
Process: com.sano.tamer.androidsettings, PID: 32035
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.sano.tamer.androidsettings/com.sano.tamer.androidsettings.SettingsActivity}: android.view.InflateException: Binary XML file line #14: Error inflating class java.lang.reflect.Constructor



当我评论ListPreference标记时,它可以工作,并打开了首选项 Activity ,我复制并粘贴了首选项文件,那么问题是什么呢?
我正在使用Android Studio 2.1.2

谢谢

我的设备是运行Kitkat的Asus Fonepad 7 FE375CG

这是完整的错误日志:
07-23 07:06:28.629 5034-5034/com.sano.tamer.androidsettings E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sano.tamer.androidsettings, PID: 5034
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sano.tamer.androidsettings/com.sano.tamer.androidsettings.SettingsActivity}: android.view.InflateException: Binary XML file line #14: Error inflating class java.lang.reflect.Constructor
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
  at android.app.ActivityThread.access$800(ActivityThread.java:139)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:149)
  at android.app.ActivityThread.main(ActivityThread.java:5252)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:515)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
  at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class java.lang.reflect.Constructor
  at android.preference.GenericInflater.createItem(GenericInflater.java:397)
  at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417)
  at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428)
  at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
  at android.preference.GenericInflater.rInflate(GenericInflater.java:493)
  at android.preference.GenericInflater.inflate(GenericInflater.java:326)
  at android.preference.GenericInflater.inflate(GenericInflater.java:263)
  at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272)
  at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1472)
  at com.sano.tamer.androidsettings.SettingsActivity.onCreate(SettingsActivity.java:11)
  at android.app.Activity.performCreate(Activity.java:5403)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 
  at android.app.ActivityThread.access$800(ActivityThread.java:139) 
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
  at android.os.Handler.dispatchMessage(Handler.java:102) 
  at android.os.Looper.loop(Looper.java:149) 
  at android.app.ActivityThread.main(ActivityThread.java:5252) 
  at java.lang.reflect.Method.invokeNative(Native Method) 
  at java.lang.reflect.Method.invoke(Method.java:515) 
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
  at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException
  at java.lang.reflect.Constructor.constructNative(Native Method)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at android.preference.GenericInflater.createItem(GenericInflater.java:383)
  at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417) 
  at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428) 
  at android.preference.GenericInflater.rInflate(GenericInflater.java:481) 
  at android.preference.GenericInflater.rInflate(GenericInflater.java:493) 
  at android.preference.GenericInflater.inflate(GenericInflater.java:326) 
  at android.preference.GenericInflater.inflate(GenericInflater.java:263) 
  at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272) 
  at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1472) 
  at com.sano.tamer.androidsettings.SettingsActivity.onCreate(SettingsActivity.java:11) 
  at android.app.Activity.performCreate(Activity.java:5403) 
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 
  at android.app.ActivityThread.access$800(ActivityThread.java:139) 
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
  at android.os.Handler.dispatchMessage(Handler.java:102) 
  at android.os.Looper.loop(Looper.java:149) 
  at android.app.ActivityThread.main(ActivityThread.java:5252) 
  at java.lang.reflect.Method.invokeNative(Native Method) 
  at java.lang.reflect.Method.invoke(Method.java:515) 
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
  at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException
  at android.content.res.AssetManager.getResourceTextArray(AssetManager.java:215)
  at android.content.res.Resources.getTextArray(Resources.java:454)
  at android.content.res.TypedArray.getTextArray(TypedArray.java:629)
  at android.preference.ListPreference.<init>(ListPreference.java:51)
  at java.lang.reflect.Constructor.constructNative(Native Method) 
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
  at android.preference.GenericInflater.createItem(GenericInflater.java:383) 
  at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417) 
  at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428) 
  at android.preference.GenericInflater.rInflate(GenericInflater.java:481) 
  at android.preference.GenericInflater.rInflate(GenericInflater.java:493) 
  at android.preference.GenericInflater.inflate(GenericInflater.java:326) 
  at android.preference.GenericInflater.inflate(GenericInflater.java:263) 
  at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272) 
  at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1472) 
  at com.sano.tamer.androidsettings.SettingsActivity.onCreate(SettingsActivity.java:11) 
  at android.app.Activity.performCreate(Activity.java:5403) 
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 
  at android.app.ActivityThread.access$800(ActivityThread.java:139) 
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
  at android.os.Handler.dispatchMessage(Handler.java:102) 
  at android.os.Looper.loop(Looper.java:149) 
  at android.app.ActivityThread.main(ActivityThread.java:5252) 
  at java.lang.reflect.Method.invokeNative(Native Method) 
  at java.lang.reflect.Method.invoke(Method.java:515) 
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
  at dalvik.system.NativeStart.main(Native Method) 

最佳答案

实际上是在这里发生错误:

Caused by: java.lang.NullPointerException
  at android.content.res.AssetManager.getResourceTextArray(AssetManager.java:215)
  at android.content.res.Resources.getTextArray(Resources.java:454)
  at android.content.res.TypedArray.getTextArray(TypedArray.java:629)
  at android.preference.ListPreference.<init>(ListPreference.java:51)

因此,在读取TextArray时似乎为空指针。

查看布局XML,我可以看到您的ListPreference使用两个数组:
<ListPreference
    ...
    android:entries="@array/entries_text"
    android:entryValues="@array/entries_values" 
    ... />

因此,请仔细检查文件res/values/string.xml并确认您已创建两个数组:entries_textentries_values
<string-array name="entries_text">
    <item>entries 1</item>
    <item>entries 2</item>
    <item>entries 3</item>
</string-array>

<string-array name="entries_values">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

关于java - ListPreference标记导致我的应用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38538385/

相关文章:

java - CdiJtaProcessEngineConfiguration 在加载事务管理器之前请求事务管理器

java - 如何在netbeans IDE开发的java swing项目中导入eclipse.org库

android - OpenSceneGraph 集成到 Qt Quick 中

Android MediaPlayer 获取音量

iphone - iPhone应用程序中的xmlparser使mach_msg_trap崩溃

c - 为什么我的程序在写入文件时崩溃?

java - Hibernate 4 - 调用 DAO 和初始化 sessionFactory bean

java - 方法追加消息的次数与相应数组中的消息的次数相同

android - 有时Google LVL失败,出现 'Error contacting licensing server.'其他人看到了吗?

c++ - C++ 内存指针练习中的未知崩溃