2010-12-05 93 views
21

這是我的第一個Android應用程序,在嘗試使用ListPreference時遇到了異常。應用程序隨喜好一起加載......但是當我觸摸ListPreference條目時,應用程序「意外停止」。ListPreferences上的異常

Settings.java

public class Settings extends PreferenceActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.addPreferencesFromResource(R.layout.settings); 
    } 
} 

的settings.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBoxPreference 
     android:key="chk_enabled" 
     android:summary="SMS response based on settings" 
     android:title="Enable" 
    /> 
    <ListPreference 
     android:title="Contacts" 
     android:summary="Contacs that will be sent SMSs" 
     android:key="list_contacts" 
     android:defaultValue="0" 
     android:entries="@array/list_entries" 
     android:entryValues="@array/list_values" 
    /> 
</PreferenceScreen> 

arrays.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="list_entries"> 
     <item>All</item> 
     <item>WhiteList</item> 
     <item>BlackList</item> 
    </string-array> 

    <integer-array name="list_values"> 
     <item>0</item> 
     <item>1</item> 
     <item>2</item> 
    </integer-array> 
</resources> 

這是logcat的輸出:

D/AndroidRuntime(3187): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
D/AndroidRuntime(3187): CheckJNI is OFF 
D/AndroidRuntime(3187): --- registering native functions --- 
I/jdwp (3187): received file descriptor 16 from ADB 
/ddm-heap(3187): Got feature list request 
I/ActivityManager( 86): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=tml.UI.main/.MainActivity } 
D/AndroidRuntime(3187): Shutting down VM 
D/dalvikvm(3187): DestroyJavaVM waiting for non-daemon threads to exit 
I/ActivityManager( 86): Start proc tml.UI.main for activity tml.UI.main/.MainActivity: pid=3194 uid=10039 gids={1015} 
D/dalvikvm(3187): DestroyJavaVM shutting VM down 
D/dalvikvm(3187): HeapWorker thread shutting down 
D/dalvikvm(3187): HeapWorker thread has shut down 
D/jdwp (3187): JDWP shutting down net... 
D/jdwp (3187): +++ peer disconnected 
I/dalvikvm(3187): Debugger has detached; object registry had 1 entries 
D/dalvikvm(3187): VM cleaning up 
D/dalvikvm(3187): LinearAlloc 0x0 used 676380 of 4194304 (16%) 
I/jdwp (3194): received file descriptor 10 from ADB 
D/ddm-heap(3194): Got feature list request 
W/Resources(3194): Converting to string: TypedValue{t=0x10/d=0x0 a=-1} 
I/ActivityManager( 86): Displayed activity tml.UI.main/.MainActivity: 977 ms (total 977 ms) 
D/AndroidRuntime(3194): Shutting down VM 
W/dalvikvm(3194): threadid=3: thread exiting with uncaught exception (group=0x4001da28) 
E/AndroidRuntime(3194): Uncaught handler: thread main exiting due to uncaught exception 
E/AndroidRuntime(3194): java.lang.NullPointerException 
E/AndroidRuntime(3194): at android.preference.ListPreference.findIndexOfValue(ListPreference.java:169) 
E/AndroidRuntime(3194): at android.preference.ListPreference.getValueIndex(ListPreference.java:178) 
E/AndroidRuntime(3194): at android.preference.ListPreference.onPrepareDialogBuilder(ListPreference.java:190) 
E/AndroidRuntime(3194): at android.preference.DialogPreference.showDialog(DialogPreference.java:291) 
E/AndroidRuntime(3194): at android.preference.DialogPreference.onClick(DialogPreference.java:262) 
E/AndroidRuntime(3194): at android.preference.Preference.performClick(Preference.java:811) 
E/AndroidRuntime(3194): at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:190) 
E/AndroidRuntime(3194): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
E/AndroidRuntime(3194): at android.widget.ListView.performItemClick(ListView.java:3246) 
E/AndroidRuntime(3194): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1635) 
E/AndroidRuntime(3194): at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime(3194): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(3194): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(3194): at android.app.ActivityThread.main(ActivityThread.java:4203) 
E/AndroidRuntime(3194): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(3194): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(3194): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
E/AndroidRuntime(3194): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
E/AndroidRuntime(3194): at dalvik.system.NativeStart.main(Native Method) 
I/Process ( 86): Sending signal. PID: 3194 SIG: 3 
I/dalvikvm(3194): threadid=7: reacting to signal 3 
I/dalvikvm(3194): Wrote stack trace to '/data/anr/traces.txt' 
I/Process (3194): Sending signal. PID: 3194 SIG: 9 
I/ActivityManager( 86): Process tml.UI.main (pid 3194) has died. 
I/WindowManager( 86): WIN DEATH: Window{4341fd00 tml.UI.main/tml.UI.main.MainActivity paused=false} 
W/UsageStats( 86): Unexpected resume of com.android.launcher while already resumed in tml.UI.main 
W/InputManagerService( 86): Got RemoteException sending setActive(false) notification to pid 3194 uid 10039 
+0

請發佈LogCat信息。這將有助於我們所有人在這裏幫助你解決這個問題。 – 2010-12-05 02:55:33

+0

我看到logcat是一個adb命令,但我不知道如何使用它...你能告訴我嗎? – PedroC88 2010-12-05 03:01:22

+0

您使用的是Eclipse ADT嗎?或者命令行工具? – 2010-12-05 03:03:28

回答

48

我修正了它......我一直在嘗試,並最終發現我不能使用整數數組作爲entryValues來源。我只是將該整數數組更改爲一個字符串數組並使其工作。

如果有一種方法可以使用integer-array作爲entryValues的源代碼,請評論。

1

我一直在尋找類似的解決方案來尋找你想要的東西,同意你應該可以使用一個Integer數組來讀取和存儲一個整數結果。

我發現這個問題的解決方案是在http://kvance.livejournal.com/1039349.html,我發現它是有用的。

它並不完全解決問題的方式,我想或以我想要的方式,而是仍然指定您的初始/選擇值與字符串數組,雖然當ListPreference將其保存回SharedPreferences它保存爲一個Integer而不是String(在用戶選擇時進行轉換),不需要在訪問首選項值時在應用程序中多次轉換它。