[英]Android App crashes immediately when preferences screen is started
我一直在為應用程序設置首選項屏幕,甚至在崩潰之前都沒有顯示它。 我檢查了一些有關共享首選項的教程,我的代碼與它們相似,但是沒有任何效果。 我認為問題出在我的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
在您的偏好活動onCreate中,您可能有以下內容:
setContentView(R.xml.prefs);
您需要這樣的東西:
addPreferencesFromResource(R.xml.prefs);
也許您更改了首選項架構,請嘗試刪除存儲在/ dbdata / databases / com_your_app / shared_prefs /或/ data / data / com_your_app中的舊偏好文件。
確保您具有AndroidManifest.xml文件中列出的活動
<activity android:name=".Preferences"></activity>
應用程序以某種方式認為PreferenceScreen
是android.view
包的,但系統文檔僅在android.preference
包中知道它
Caused by: java.lang.ClassNotFoundException: android.view.PreferenceScreen in loader dalvik.system.PathClassLoader[/data/app/com.cs.fsu.edu.project4-1.apk]
您是否以某種方式在應用程序中添加了一個名為PreferenceScreen的類,這可能會使系統感到困惑?
我想在這里加分。 我的經驗是,始終進行干凈的構建,始終檢查清單中的意圖,活動,過濾器和權限。
檢查軟件包名稱,有時您重命名了可能會出錯的軟件包。
在安裝之前,請刪除以前的應用程序(是在其他PC上創建的嗎?),然后刪除舊設置。
這一切都讓我錯了:-)
如果這不起作用,請將所有文件復制到新項目。 愚蠢,但這對我有用-對所有內容都未加注釋,但仍然無效。 然后:ping,啟動並開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.