Android 自动强制关闭
对于一个学校项目,我正在使用Android 自动强制关闭,android,exception,preference,forceclose,dialog-preference,Android,Exception,Preference,Forceclose,Dialog Preference,对于一个学校项目,我正在使用PreferenceScreens作为框架构建一个应用程序。 我已经创建了两个新类来满足我的需要:SeekBarDialogPreference(设计用于处理音量和亮度)和DigitalPreference(用于其他所有内容) 这是统一的顶部,这是主页 public class TopPage extends PreferenceActivity { @Override public void onCreate(Bundle allthethings
PreferenceScreen
s作为框架构建一个应用程序。我已经创建了两个新类来满足我的需要:
SeekBarDialogPreference
(设计用于处理音量和亮度)和DigitalPreference
(用于其他所有内容)
这是统一的顶部,这是主页
public class TopPage extends PreferenceActivity {
@Override
public void onCreate(Bundle allthethings) {
super.onCreate(allthethings);
Map<String, ?> shareprefs = PreferenceManager.getDefaultSharedPreferences(this).getAll();
addPreferencesFromResource(R.xml.prefs);
}
@Override
public void onStart() {
getPrefs();
}
private SeekBarDialogPreference makeSeekBar(Preference pref) {
return (SeekBarDialogPreference) findPreference(pref.getKey());
}
private DigitalPreference makeDigital(Preference pref) {
return (DigitalPreference) findPreference(pref.getKey());
}
private void setClickListener(Preference preference, final boolean isSeekBar) {
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference pref) {
if (isSeekBar) {
makeSeekBarDialogPreference(pref).show();
} else {
makeDigitalPreference(pref).show();
}
return true;
}
});
}
public void getPrefs() {
SeekBarDialogPreference Ringvolume_preference = (SeekBarDialogPreference) findPreference("Ringvolume_preference");
setClickListener(Ringvolume_Preference, true);
//Instantiated each Preference and attached a ClickListener to each
}
public class TopPage扩展了PreferenceActivity{
@凌驾
创建时的公共void(捆绑所有内容){
super.onCreate(所有内容);
Map shareprefs=PreferenceManager.GetDefaultSharedReferences(this.getAll();
addPreferencesFromResource(R.xml.prefs);
}
@凌驾
public void onStart(){
getPrefs();
}
专用SeekbardiologPreference makeSeekBar(首选项pref){
return(SeekBarDialogPreference)findPreference(pref.getKey());
}
私有数字首选项makeDigital(首选项pref){
返回(DigitalPreference)FindReference(pref.getKey());
}
私有void setClickListener(首选项首选项,最终布尔值isSeekBar){
preference.setOnPreferenceClickListener(新的OnPreferenceClickListener(){
公共布尔onPreferenceClick(首选项优先){
如果(isSeekBar){
makeSeekBarDialogPreference(pref).show();
}否则{
makeDigitalPreference(pref.show();
}
返回true;
}
});
}
public void getPrefs(){
SeekbardiologPreference Ringvolume_preference=(SeekbardiologPreference)findPreference(“Ringvolume_preference”);
setClickListener(Ringvolume_首选项,true);
//实例化每个首选项并将ClickListener附加到每个首选项
}
我在res/xml/prefs.xml中声明了所有首选项。现在,每当我运行应用程序时,都会立即强制关闭。我怀疑我的清单有问题:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gobernador"
android:versionCode="1"
android:versionName="0.1">
<uses-sdk android:minSdkVersion="5"
android:targetSdkVersion="10"/>
<application android:label="@string/app_name"
android:name="APP">
<activity android:name=".TopPage"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
,以及其他问题,但我还没能解决这个问题
如果有人能指引我正确的方向,你会让我走出一个巨大的常规。谢谢
编辑:在浏览logcat之后,我发现prefs.xml文件中抛出了一个异常
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">
<PreferenceScreen android:title="Volumes"
android:summary="Ring, Notification, System, etc.">
<com.gobernador.SeekBarDialogPreference android:key="Ringvolume_preference"
android:title="Ring Volume"
android:summary=""
android:dialogLayout="@layout/seekbar_layout"/>
<com.gobernador.SeekBarDialogPreference android:key="Notifyvolume_preference"
android:title="Notification Volume"
android:summary=""
android:dialogLayout="@layout/seekbar_layout"/>
... and so on
等等
它在哪里尝试访问seekbartialogpreference
。为什么不工作
编辑:引发的异常是一个NoSuchMethodException:seekBadialogPreference(上下文,属性集)
。我定义了那个方法,我遗漏了什么?我找到了我的解决方案。这是一个java错误。我未能将我的SeekBarDialogPreference
和DigitalPreference
的构造函数列为public,因此系统无法调用它们。在这里发布异常堆栈跟踪。您需要发布更多堆栈跟踪行。真正的错误是r原因在com.gobernador.SeekBarDialogPreference
类构造函数(或其方法)中。构造函数中有错误。java.lang.NoSuchMethodException:SeekBarDialogPreference(Context,AttributeSet)
但我定义了该构造函数。我遗漏了什么吗?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gobernador"
android:versionCode="1"
android:versionName="0.1">
<uses-sdk android:minSdkVersion="5"
android:targetSdkVersion="10"/>
<application android:label="@string/app_name"
android:name="APP">
<activity android:name=".TopPage"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">
<PreferenceScreen android:title="Volumes"
android:summary="Ring, Notification, System, etc.">
<com.gobernador.SeekBarDialogPreference android:key="Ringvolume_preference"
android:title="Ring Volume"
android:summary=""
android:dialogLayout="@layout/seekbar_layout"/>
<com.gobernador.SeekBarDialogPreference android:key="Notifyvolume_preference"
android:title="Notification Volume"
android:summary=""
android:dialogLayout="@layout/seekbar_layout"/>
... and so on