Domanda

Questa è la mia prima applicazione Android e ho rilevato un'eccezione quando si cerca di utilizzare il ListPreference. I carichi applicazione con le preferenze ... ma quando tocco la voce ListPreference le applicazioni "si arresta inaspettatamente".

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>

Questa è l'uscita 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
È stato utile?

Soluzione

I risolto ... Ho continuato a provare e, alla fine, si scopre che non posso usare un intero array come entryValues Source. Ho appena cambiato che integer-array in una stringa-array e ottenuto di lavoro.

Se c'è un modo per utilizzare integer-array come sorgente per entryValues commento devi prima.

Altri suggerimenti

Sono stato alla ricerca di una soluzione simile a quello che stai cercando, accetti che si dovrebbe essere in grado di utilizzare un array di interi per leggere e memorizzare un risultato intero.

Una soluzione a questo problema che ho trovato era a http://kvance.livejournal.com/1039349.html , che ho trovato per essere utile.

Non del tutto a risolvere il problema del modo in cui stavo pensando o in quel modo penso che si vuole, invece è ancora specificare i valori di selezione / iniziali con un array di stringhe, anche se quando il ListPreference salva di nuovo ai SharedPreferences essa salva come numero intero invece di una stringa (facendo la conversione quando l'utente seleziona it), eliminando la necessità di avere per convertirlo forse molte volte in tutta l'applicazione quando si accede al valore di preferenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top