感谢大家的回答和时间!
你好,
我一直试图从Preferences类调用位于主应用程序类中的非静态方法。
因为我调用的方法不是静态的,所以我实例化了主类,然后尝试调用我想要的特定方法,但它是强制关闭的。
preferences.class(从中调用方法):
Preference sorted = (Preference) findPreference("sortPref");
sorted.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
Object d = new mainActivity();
((mainActivity) d).queryBookmarks();
return true;
}
});
我调用的mainActivity.class方法:
public void queryBookmarks() {
Toast.makeText(context, "blah blah", Toast.LENGTH_LONG).show();
//context is not null and the Toast is working if I call it from mainActivity.class
}
Logcat:
E/AndroidRuntime(11718): FATAL EXCEPTION: main
E/AndroidRuntime(11718): java.lang.NullPointerException
E/AndroidRuntime(11718): at android.content.ContextWrapper.getContentReso
lver(ContextWrapper.java:90)
E/AndroidRuntime(11718): at android.app.Activity.managedQuery(Activity.ja
va:1520)
E/AndroidRuntime(11718): at com.queryBookmarks(
.java:101)
E/AndroidRuntime(11718): at com.Preferences$2.onPrefer
enceChange(Preferences.java:47)
E/AndroidRuntime(11718): at android.preference.Preference.callChangeListe
ner(Preference.java:756)
E/AndroidRuntime(11718): at android.preference.ListPreference.onDialogClo
sed(ListPreference.java:219)
E/AndroidRuntime(11718): at android.preference.DialogPreference.onDismiss
(DialogPreference.java:384)
E/AndroidRuntime(11718): at android.app.Dialog$ListenersHandler.handleMes
sage(Dialog.java:1047)
E/AndroidRuntime(11718): at android.os.Handler.dispatchMessage(Handler.ja
va:99)
E/AndroidRuntime(11718): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(11718): at android.app.ActivityThread.main(ActivityThrea
d.java:4627)
E/AndroidRuntime(11718): at java.lang.reflect.Method.invokeNative(Native
Method)
E/AndroidRuntime(11718): at java.lang.reflect.Method.invoke(Method.java:5
21)
E/AndroidRuntime(11718): at com.android.internal.os.ZygoteInit$MethodAndA
rgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(11718): at com.android.internal.os.ZygoteInit.main(Zygot
eInit.java:626)
E/AndroidRuntime(11718): at dalvik.system.NativeStart.main(Native Method)
D/dalvikvm(11718): GC_FOR_MALLOC freed 4248 objects / 282248 bytes in 40ms
W/ActivityManager( 244): Force finishing activity com.package/.Pre
ferences
感谢你的帮助!:)
编辑:我不能使querybookmarks()成为静态函数,因为它使用的是android函数managedquery,而不是静态函数。