java - 当首选项屏幕启动时,Android 应用程序立即崩溃

标签 java android xml sharedpreferences

我一直在为应用程序开发首选项屏幕,但我什至没有让它在崩溃之前显示屏幕。我已经检查了几个关于共享首选项的教程,我的代码与他们的类似,但没有任何效果。我认为问题出在我的preferences.xml 文件中,因为我注释掉了除了PreferenceActivity 中打开XML 文件之外的所有内容。

这是我的preferences.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory
    android:title="Password">
    <EditTextPreference
        android:name="Your Password"
        android:title="Password"
        android:defaultValue=""
        android:summary="For logging in if facial recognition fails"
        android:key="password" />
    <EditTextPreference
        android:name="Max Attempts"
        android:title="Max Attempts"
        android:defaultValue="3"
        android:summary="Max number of times to try authentication before falling back to password"
        android:key="maxAttempts" />
  </PreferenceCategory>
  <PreferenceCategory
    android:title="Security">
    <CheckBoxPreference
        android:title="Intruder Alert"
        android:defaultValue="false"
        android:summary="Notify me if you detect a face other than mine"
        android:key="intruderAlert" />
        </PreferenceCategory>
    <PreferenceCategory
        android:title="Intruder Notification">
        <EditTextPreference
        android:name="Your Email"
        android:title="email"
        android:defaultValue=""
        android:summary="An email address for us to notify"
        android:key="email" />
        <EditTextPreference
        android:name="Your Phone Number"
        android:title="phoneNumber"
        android:defaultValue=""
        android:summary="A phone number for us to notify"
        android:key="phoneNumber" />            
        </PreferenceCategory>
</PreferenceScreen>

而且,如果我错了,我的问题是我的 java 文件,这里是 PreferenceActivity。目前大部分都被注释掉了,但程序仍然崩溃。

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {

    /*private EditTextPreference password;
    private EditTextPreference maxAttempts;
    private CheckBoxPreference intruderAlert;
    private EditTextPreference email;
    private EditTextPreference phoneNumber;

    String PassWord;
    int MaxAttempts;
    boolean IntruderAlert;
    String Email;
    String PhoneNumber;*/

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {   
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);  
        //password = (EditTextPreference) getPreferenceScreen().findPreference("password");
        //maxAttempts = (EditTextPreference) getPreferenceScreen().findPreference("maxAttempts");
        //intruderAlert = (CheckBoxPreference) getPreferenceScreen().findPreference("intruderAlert");
        //email = (EditTextPreference) getPreferenceScreen().findPreference("email");
        //phoneNumber = (EditTextPreference) getPreferenceScreen().findPreference("phoneNumber");
    }

    private void setSummaries()
    {

    }

    @Override
    protected void onResume() 
    {
        /*super.onResume();
        String intruderAlertSetting;
        if (intruderAlert.isChecked())
            intruderAlertSetting = "on";
        else
            intruderAlertSetting = "off";
        password.setSummary("Your password is " +password.getText()+ ".");
        maxAttempts.setSummary("The max attempts that will be made is "+maxAttempts.getText() + ".");
        intruderAlert.setSummary("You have intruder alert set to" + intruderAlertSetting+".");
        if (email.getText().equals(""))
            email.setSummary("You have no email address stored.");
        else
            email.setSummary("Your stored email address is "+email.getText() + ".");
        if (phoneNumber.getText().equals(""))
            phoneNumber.setSummary("You have no phone number stored.");
        else
            phoneNumber.setSummary("Your stored phone number is " + phoneNumber.getText()+".");
        // Set up a listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);*/

    }

    @Override
    protected void onPause() 
    {
        /*super.onPause();

        String intruderAlertSetting;
        if (intruderAlert.isChecked())
            intruderAlertSetting = "on";
        else
            intruderAlertSetting = "off";
        password.setSummary("Your password is " +password.getText()+ ".");
        maxAttempts.setSummary("The max attempts that will be made is "+maxAttempts.getText() + ".");
        intruderAlert.setSummary("You have intruder alert set to" + intruderAlertSetting+".");
        if (email.getText().equals(""))
            email.setSummary("You have no email address stored.");
        else
            email.setSummary("Your stored email address is "+email.getText() + ".");
        if (phoneNumber.getText().equals(""))
            phoneNumber.setSummary("You have no phone number stored.");
        else
            phoneNumber.setSummary("Your stored phone number is " + phoneNumber.getText()+".");

        // Unregister the listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);*/
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) 
    {
        /*String intruderAlertSetting;
        if (intruderAlert.isChecked())
            intruderAlertSetting = "on";
        else
            intruderAlertSetting = "off";
        password.setSummary("Your password is " +password.getText()+ ".");
        maxAttempts.setSummary("The max attempts that will be made is "+maxAttempts.getText() + ".");
        intruderAlert.setSummary("You have intruder alert set to" + intruderAlertSetting+".");
        if (email.getText().equals(""))
            email.setSummary("You have no email address stored.");
        else
            email.setSummary("Your stored email address is "+email.getText() + ".");
        if (phoneNumber.getText().equals(""))
            phoneNumber.setSummary("You have no phone number stored.");
        else
            phoneNumber.setSummary("Your stored phone number is " + phoneNumber.getText()+".");
        PassWord = password.getText();
        MaxAttempts = Integer.parseInt(maxAttempts.getText());
        IntruderAlert = intruderAlert.isChecked();
        Email = email.getText();
        PhoneNumber = phoneNumber.getText();*/

    }   
}

以下是有关崩溃的 LogCat 信息:

04-23 16:37:09.181: WARN/dalvikvm(818): threadid=1: thread exiting with uncaught exception (group=0x40015560)
04-23 16:37:09.221: ERROR/AndroidRuntime(818): FATAL EXCEPTION: main
04-23 16:37:09.221: ERROR/AndroidRuntime(818): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cs.fsu.edu.project4/com.cs.fsu.edu.project4.Preferences}: android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.os.Looper.loop(Looper.java:123)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.ActivityThread.main(ActivityThread.java:3647)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at java.lang.reflect.Method.invokeNative(Native Method)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at java.lang.reflect.Method.invoke(Method.java:507)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at dalvik.system.NativeStart.main(Native Method)
04-23 16:37:09.221: ERROR/AndroidRuntime(818): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.Activity.setContentView(Activity.java:1657)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at com.cs.fsu.edu.project4.Preferences.onCreate(Preferences.java:33)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     ... 11 more
04-23 16:37:09.221: ERROR/AndroidRuntime(818): Caused by: java.lang.ClassNotFoundException: android.view.PreferenceScreen in loader dalvik.system.PathClassLoader[/data/app/com.cs.fsu.edu.project4-1.apk]
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.view.LayoutInflater.createView(LayoutInflater.java:471)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
04-23 16:37:09.221: ERROR/AndroidRuntime(818):     ... 19 more
04-23 16:37:09.251: WARN/ActivityManager(62):   Force finishing activity com.cs.fsu.edu.project4/.Preferences

最佳答案

也许您更改了首选项架构,请尝试删除存储在/dbdata/databases/com_your_app/shared_prefs/或/data/data/com_your_app 中的旧首选项文件。

关于java - 当首选项屏幕启动时,Android 应用程序立即崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765412/

相关文章:

java - 如何替换操作栏中的溢出和抽屉导航?

java - Android 中如何获取某个目录下的文件列表?

android - 在 Google Play 上退款测试订单

android - 如何编译android ndk binder源码

java - 无效的 XML 字符(Unicode : 0xc) was found

iphone - 如何让 NSMutableArray 和 NSDictionary 在 UI 中显示结果

java - 如何将 Swing JFrame 配置为 Spring bean?

java - 迷失在日期和时区

java - 如何编写带有嵌套模板参数的类?

java - 删除操作栏以制作弹出窗口