Android应用程序立即崩溃时preferences屏幕启动 [英] Android App crashes immediately when preferences screen is started

查看:137
本文介绍了Android应用程序立即崩溃时preferences屏幕启动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在一个preferences屏幕上的一个应用程序,而我还没有得到它显示在屏幕崩溃之前。我已经研究过有关共享preferences一些教程和我的code酷似他们,但没有奏效。我认为这个问题是在我的preferences.xml文件,因为我评论了一切,除了在XML文件在我的preferenceActivity开幕。

下面是我的preferences.xml文件:

 < XML版本=1.0编码=UTF-8&GT?;
< preferenceScreen
  的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
  < preferenceCategory
    机器人:标题=密码>
    < EditText上preference
        机器人:NAME =您的密码
        机器人:标题=密码
        安卓:设置defaultValue =
        机器人:总结=因为,如果面部识别失败登录
        机器人:关键=密码/>
    < EditText上preference
        机器人:名称=最大尝试
        机器人:标题=最大尝试
        安卓:设置defaultValue =3
        机器人:总结=次最大数量回落到密码,然后尝试认证
        机器人:关键=maxAttempts/>
  < / preferenceCategory>
  < preferenceCategory
    机器人:标题=安全>
    <复选框preference
        机器人:标题=的Intruder Alert
        安卓:设置defaultValue =假
        机器人:总结=如果检测到人脸比我的其他通知我
        机器人:关键=intruderAlert/>
        < / preferenceCategory>
    < preferenceCategory
        机器人:标题=入侵者通知>
        < EditText上preference
        机器人:NAME =您的电子邮件
        机器人:标题=电子邮件
        安卓:设置defaultValue =
        机器人:总结=的电子邮件地址,我们通知
        机器人:关键=电子邮件/>
        < EditText上preference
        机器人:NAME =你的电话号码
        机器人:标题=phoneNumber的
        安卓:设置defaultValue =
        机器人:总结=电话号码为我们通知
        机器人:关键=phoneNumber的/>
        < / preferenceCategory>
< / preferenceScreen>
 

而且,如果我错了,我的问题是我的java文件,这里的preferenceActivity。大多数被注释掉的那一刻,但程序仍然崩溃。

 公共类preferences扩展preferenceActivity实现OnShared preferenceChangeListener {

    / *私人的EditText preference密码;
    私人的EditText preference maxAttempts;
    私人复选框preference intruderAlert;
    私人的EditText preference电子邮件;
    私人的EditText preference phoneNumber的;

    字符串密码;
    INT MaxAttempts;
    布尔IntruderAlert;
    字符串电子邮件;
    字符串联系号码; * /

    @覆盖
    公共无效的onCreate(包savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        加preferencesFromResource(R.xml preferences。);
        //密码=(EditText上preference)获得preferenceScreen()找到preference(密码)。
        // maxAttempts =(EditText上preference)获得preferenceScreen()找到preference(maxAttempts)。
        // intruderAlert =(复选框preference)获得preferenceScreen()找到preference(intruderAlert)。
        //电子邮件=(EditText上preference)获得preferenceScreen()找到preference(电子邮件)。
        // phoneNumber的=(EditText上preference)获得preferenceScreen()找到preference(phoneNumber的)。
    }

    私人无效setSummaries()
    {

    }

    @覆盖
    保护无效onResume()
    {
        /*super.onResume();
        字符串intruderAlertSetting;
        如果(intruderAlert.isChecked())
            上intruderAlertSetting =;
        其他
            intruderAlertSetting =关;
        password.setSummary(您的密码是+ password.getText()+。);
        maxAttempts.setSummary(将要取得的最大的尝试为+ maxAttempts.getText()+。);
        intruderAlert.setSummary(你入侵告警设置为+ intruderAlertSetting +。);
        如果(email.getText()。等于())
            email.setSummary(你没有电子邮件地址保存。);
        其他
            email.setSummary(你存储的电子邮件地址是+ email.getText()+。);
        如果(phoneNumber.getText()。等于())
            phoneNumber.setSummary(你没有存储的电话号码。);
        其他
            phoneNumber.setSummary(你存储的电话号码是+ phoneNumber.getText()+。);
        //设置一个监听器,每当一个重要变化
        GET preferenceScreen()。getShared preferences()
                .registerOnShared preferenceChangeListener(本); * /

    }

    @覆盖
    保护无效的onPause()
    {
        /*super.onPause();

        字符串intruderAlertSetting;
        如果(intruderAlert.isChecked())
            上intruderAlertSetting =;
        其他
            intruderAlertSetting =关;
        password.setSummary(您的密码是+ password.getText()+。);
        maxAttempts.setSummary(将要取得的最大的尝试为+ maxAttempts.getText()+。);
        intruderAlert.setSummary(你入侵告警设置为+ intruderAlertSetting +。);
        如果(email.getText()。等于())
            email.setSummary(你没有电子邮件地址保存。);
        其他
            email.setSummary(你存储的电子邮件地址是+ email.getText()+。);
        如果(phoneNumber.getText()。等于())
            phoneNumber.setSummary(你没有存储的电话号码。);
        其他
            phoneNumber.setSummary(你存储的电话号码是+ phoneNumber.getText()+。);

        //注销监听器,每当一个重要变化
        GET preferenceScreen()。getShared preferences()
                .unregisterOnShared preferenceChangeListener(本); * /
    }

    @覆盖
    公共无效onShared preferenceChanged(共享preferences共享preferences,字符串键)
    {
        / *字符串intruderAlertSetting;
        如果(intruderAlert.isChecked())
            上intruderAlertSetting =;
        其他
            intruderAlertSetting =关;
        password.setSummary(您的密码是+ password.getText()+。);
        maxAttempts.setSummary(将要取得的最大的尝试为+ maxAttempts.getText()+。);
        intruderAlert.setSummary(你入侵告警设置为+ intruderAlertSetting +。);
        如果(email.getText()。等于())
            email.setSummary(你没有电子邮件地址保存。);
        其他
            email.setSummary(你存储的电子邮件地址是+ email.getText()+。);
        如果(phoneNumber.getText()。等于())
            phoneNumber.setSummary(你没有存储的电话号码。);
        其他
            phoneNumber.setSummary(你存储的电话号码是+ phoneNumber.getText()+。);
        密码= password.getText();
        MaxAttempts =的Integer.parseInt(maxAttempts.getText());
        IntruderAlert = intruderAlert.isChecked();
        电子邮件= email.getText();
        联系号码= phoneNumber.getText(); * /

    }
}
 

下面是崩溃的LogCat中的信息:

  04-23 16:37:09.181:WARN / dalvikvm(818):主题ID = 1:螺纹退出与未捕获的异常(组= 0x40015560)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):致命异常:主要
04-23 16:37:09.221:ERROR / AndroidRuntime(818):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.cs.fsu.edu.project4 / com.cs.fsu.edu.project4 preferences}:android.view.InflateException:二进制XML文件中的行#2:错误充气类preferenceScreen
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:928)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.os.Handler.dispatchMessage(Handler.java:99)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.os.Looper.loop(Looper.java:123)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.ActivityThread.main(ActivityThread.java:3647)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在java.lang.reflect.Method.invokeNative(本机方法)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在java.lang.reflect.Method.invoke(Method.java:507)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在dalvik.system.NativeStart.main(本机方法)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):android.view.InflateException:二进制XML文件中的行#2:错误充气类preferenceScreen所致
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.view.LayoutInflater.inflate(LayoutInflater.java:386)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.view.LayoutInflater.inflate(LayoutInflater.java:276)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.Activity.setContentView(Activity.java:1657)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在com.cs.fsu.edu.project4 preferences.onCreate(preferences.java:33)。
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):11 ...更多
04-23 16:37:09.221:ERROR / AndroidRuntime(818):产生的原因:抛出java.lang.ClassNotFoundException:android.view preferenceScreen装载机dalvik.system.PathClassLoader [/data/app/com.cs。 fsu.edu.project4-1.apk]
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在java.lang.ClassLoader.loadClass(ClassLoader.java:551)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在java.lang.ClassLoader.loadClass(ClassLoader.java:511)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.view.LayoutInflater.createView(LayoutInflater.java:471)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
04-23 16:37:09.221:ERROR / AndroidRuntime(818):19 ...更多
04-23 16:37:09.251:WARN / ActivityManager(62):强制完成活动com.cs.fsu.edu.project4 /.preferences
 

解决方案

在你的preference活动的onCreate,你可能有这样的:

 的setContentView(R.xml preFS);
 

您需要的东西而不是像这样:

添加preferencesFromResource(R.xml preFS);

参见:<一href="http://stackoverflow.com/questions/6025349/$p$pferencescreen-class-not-found">$p$pferenceScreen未找到类

I have been working on a preferences screen for an app, and I haven't even gotten it to display the screen before it crashes. I have examined several tutorials about shared preferences and my code resembles theirs, but nothing has worked. I think the problem is in my preferences.xml file, because I commented out everything except the opening of the XML file in my PreferenceActivity.

Here is my preferences.xml file:

<?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>

And, in case I'm wrong and my problem is my java file, here's the PreferenceActivity. Most is commented out at the moment, but the program still crashes.

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();*/

    }   
}

Here is the LogCat info on the crash:

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

解决方案

In your Preference Activity onCreate you probably had this:

setContentView(R.xml.prefs);

you need something like this instead:

addPreferencesFromResource(R.xml.prefs);

Refer to: PreferenceScreen class not found

这篇关于Android应用程序立即崩溃时preferences屏幕启动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆