我的活动中有一个按钮,我想在我的偏好活动中选择点击它时打开的互联网网站。
array.xml是这样的:
<resources>
<integer-array name="sites_values">
<item>1</item>
<item>2</item>
<item>3</item>
</integer-array>
<string-array name="sites">
<item>@string/site1</item>
<item>@string/site2</item>
<item>@string/site3</item>
</string-array>
</resources>
preference.xml:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<ListPreference
android:defaultValue="1"
android:entries="@array/sites"
android:entryValues="@array/sites_values"
android:key="websites"
android:persistent="true"
android:summary="@string/summary"
android:title="@string/title" />
</PreferenceScreen>
这是PreferenceActivity:
public void public class MyPreference extends PreferenceActivity {
public static final int DEFAULT_SITE = 1;
public static final String FAV_SITE = "websites";
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
最后,这是MainActivity的onClick方法无效,“应用程序意外停止”错误:
public void click(View v) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
String url;
switch (pref.getInt(MyPreference.FAV_SITE,
MyPreference.DEFAULT_SITE)) {
case 1:
default:
url = "http://www.google.com";
break;
case 2:
url = "http://www.youtube.com";
break;
case 3:
url = "http://www.facebook.com";
break;
}
Intent BrowserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(BrowserIntent);
}
我做错了什么? onResume已经使用SharedPreferences并且工作正常。
编辑:
这是LogCat
07-08 16:18:27.540: W/dalvikvm(3041): threadid=1: thread exiting with uncaught exception (group=0xb67f44f0)
07-08 16:18:27.570: E/AndroidRuntime(3041): FATAL EXCEPTION: main
07-08 16:18:27.570: E/AndroidRuntime(3041): java.lang.IllegalStateException: Could not execute method of the activity
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.view.View$1.onClick(View.java:2144)
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.view.View.performClick(View.java:2485)
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.view.View$PerformClick.run(View.java:9080)
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.os.Handler.handleCallback(Handler.java:587)
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.os.Handler.dispatchMessage(Handler.java:92)
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.os.Looper.loop(Looper.java:130)
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-08 16:18:27.570: E/AndroidRuntime(3041): at java.lang.reflect.Method.invokeNative(Native Method)
07-08 16:18:27.570: E/AndroidRuntime(3041): at java.lang.reflect.Method.invoke(Method.java:507)
07-08 16:18:27.570: E/AndroidRuntime(3041): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-08 16:18:27.570: E/AndroidRuntime(3041): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-08 16:18:27.570: E/AndroidRuntime(3041): at dalvik.system.NativeStart.main(Native Method)
07-08 16:18:27.570: E/AndroidRuntime(3041): Caused by: java.lang.reflect.InvocationTargetException
07-08 16:18:27.570: E/AndroidRuntime(3041): at java.lang.reflect.Method.invokeNative(Native Method)
07-08 16:18:27.570: E/AndroidRuntime(3041): at java.lang.reflect.Method.invoke(Method.java:507)
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.view.View$1.onClick(View.java:2139)
07-08 16:18:27.570: E/AndroidRuntime(3041): ... 11 more
07-08 16:18:27.570: E/AndroidRuntime(3041): Caused by: java.lang.ClassCastException: java.lang.String
07-08 16:18:27.570: E/AndroidRuntime(3041): at android.app.ContextImpl$SharedPreferencesImpl.getInt(ContextImpl.java:2857)
07-08 16:18:27.570: E/AndroidRuntime(3041): at it.megaforum.megaapp.MainActivity.clickMegaforum(MainActivity.java:38)
07-08 16:18:27.570: E/AndroidRuntime(3041): ... 14 more
编辑2:
我发现当我点击MyPreference活动中的偏好设置时会出现另一个错误。 如果我从integer-array更改为string-array,则此错误消失。
答案 0 :(得分:0)
我猜是“这个”:
PreferenceManager.getDefaultSharedPreferences(this);
不适合您最有可能在内联类(按钮的侦听器)中,这意味着“this”引用侦听器类而不是外部类(您的活动)。
编辑:要解决此问题,您只需要参考活动中的首选项。在创建活动时设置它,然后在监听器中使用它。或者你只是从处理所有事情的活动中调用一种方法。
答案 1 :(得分:0)
问题出在整数数组上。 我把它改成了一个字符串数组,现在它可以工作了。 这是代码。
array.xml
<resources>
<string-array name="sites_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="sites">
<item>@string/site1</item>
<item>@string/site2</item>
<item>@string/site3</item>
</string-array>
</resources>
为MyPreference
public void public class MyPreference extends PreferenceActivity {
public static final String DEFAULT_SITE = "1";
public static final String FAV_SITE = "websites";
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
监听
public void click(View v) {
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(MainActivity.this);
String url = "http://";
if (pref.getString(MyPreference.FAV_SITE, MyPreference.DEFAULT_SITE).equals("1") {
url = "http://www.google.com";
} else if (pref.getString(MyPreference.FAV_SITE, MyPreference.DEFAULT_SITE).equals("2")) {
url = "http://www.youtube.com";
} else if (pref.getString(MyPreference.FAV_SITE, MyPreference.DEFAULT_SITE).equals("3")) {
url = "http://www.facebook.com";
}
Intent BrowserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(BrowserIntent);
}