2012-05-16 7 views
5

Aparece la siguiente advertencia para cada una de mis preferencias de XML
y entiendo que java piensa que los valores predeterminados que di son enteros y espera cadenas. Pero, ¿cómo pongo una cadena literal?
Puedo vivir con la advertencia, ya que sé que es inofensivo, pero si hay una manera simple de corregirlo lo haré.Recursos de Android ¿Por qué Java cree que la cadena es un número entero?

05-16 16:28:03.210: I/ActivityManager(68): Starting activity: Intent { cmp=com.delta.app/.Preferences } 
05-16 16:28:03.750: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x1388 a=-1} 
05-16 16:28:03.870: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x64 a=-1} 
05-16 16:28:03.901: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0xa a=-1} 
05-16 16:28:03.970: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x0 a=-1} 
05-16 16:28:03.970: W/Resources(1869): Converting to string: TypedValue{t=0x10/d=0x2 a=-1} 

Aquí es el XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

<EditTextPreference 
    android:defaultValue="5000" 
    android:key="@string/MAX_MESSAGES" 
    android:summary="@string/MAX_MESSAGES_desc" 
    android:title="@string/MAX_MESSAGES_title" /> 

<EditTextPreference 
    android:defaultValue="100" 
    android:key="@string/VIEW_MAX_ROWS" 
    android:summary="@string/VIEW_MAX_ROWS_desc" 
    android:title="@string/VIEW_MAX_ROWS_title" /> 

<EditTextPreference 
    android:defaultValue="10" 
    android:key="@string/VIEW_EDGE_ROWS" 
    android:summary="@string/VIEW_EDGE_ROWS_desc" 
    android:title="@string/VIEW_EDGE_ROWS_title" /> 

<ListPreference 
    android:defaultValue="0" 
    android:entries="@array/level_list" 
    android:entryValues="@array/level_values" 
    android:key="@string/INITIAL_ORG" 
    android:summary="@string/INITIAL_ORG_desc" 
    android:title="@string/INITIAL_ORG_title" /> 

<ListPreference 
    android:defaultValue="2" 
    android:entries="@array/view_list" 
    android:entryValues="@array/view_values" 
    android:key="@string/INITIAL_VIEW" 
    android:summary="@string/INITIAL_VIEW_desc" 
    android:title="@string/INITIAL_VIEW_title" /> 

<CheckBoxPreference 
    android:defaultValue="true" 
    android:key="@string/AUTOSCROLL" 
    android:summary="@string/AUTOSCROLL_desc" 
    android:title="@string/AUTOSCROLL_title" /> 

<CheckBoxPreference 
    android:defaultValue="true" 
    android:key="@string/SEND_THEN_EXIT" 
    android:summary="@string/SEND_THEN_EXIT_desc" 
    android:title="@string/SEND_THEN_EXIT_title" /> 

<Preference 
    android:key="@string/DEFAULT_PREFS" 
    android:summary="@string/DEFAULT_PREFS_desc" 
    android:title="@string/DEFAULT_PREFS_title" /> 

</PreferenceScreen> 
+0

agregue este valor también en 'string.xml' y configure defaultvalue? –

+0

@samirmangroliya, supongo que eso funcionaría. Esperaba una solución más simple, como usar "5000" en lugar de "5000" o algo así. – ilomambo

+0

ver mi respuesta ... –

Respuesta

4

añadir esta línea en string.xml

<string name="five_thousand">5000</string>

ans ponerlo en defaultvalue..you puede hacerlo por los demás defaultValue ...

<EditTextPreference 
    android:defaultValue="@string/five_thousand" 
    android:key="@string/MAX_MESSAGES" 
    android:summary="@string/MAX_MESSAGES_desc" 
    android:title="@string/MAX_MESSAGES_title" /> 
+0

Gracias, pero si miras el XML que publiqué puedes ver que hay muchos valores predeterminados diferentes, no puedo asignar el mismo a todos. Y también la pregunta era ** ¿Cómo poner una cadena literal? ** literal, a diferencia de la referencia. – ilomambo

+0

crear en string.xml para cada uno y no sé qué es lo último? –

+0

Literal => "5000" frente a referencia => "@ cadena/five_thousand" ::::: En otras palabras, esta no es la respuesta a mi pregunta. – ilomambo

-1

De hecho, se puede probar esto, basta con añadir un espacio después del valor:

<EditTextPreference 
    android:defaultValue="5000 " 

pero hay que recortar() la cadena antes de transferir a valorar, por ejemplo: Integer.valueOf (prefer.getstring . (...) recortar())

2

doble citando a todos los defaultValue se deshizo de las advertencias para mí, pero crea otros problemas:

<EditTextPreference 
    android:defaultValue="'5000'" 
    android:key="@string/MAX_MESSAGES" 
    android:summary="@string/MAX_MESSAGES_desc" 
    android:title="@string/MAX_MESSAGES_title" /> 

Mientras que el defaultValue es una cadena a XML, parece que las citas externas se eliminen antes de ser enviadas a Java.

Pero cuando intenta editar las preferencias en la aplicación de Android, el cuadro ahora contiene la cadena '5000' en lugar del número 5000, lo que puede ocasionar otros problemas.

Si tenemos que tolerar advertencias innecesarias o campos no válidos, supongo que la primera es la única opción real.

Cuestiones relacionadas