TypedValue Conversión en cadena
Al azar puntos mientras estoy usando mi aplicación de Android, LogCat se inunda con decenas de repeticiones de las siguientes 5 líneas:
10-26 12:53:30.372 21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b00d8} 10-26 12:53:30.372 21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x1d/d=0xffe51c23 a=2 r=0x7f090047} 10-26 12:53:30.374 21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b008a} 10-26 12:53:30.375 21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b00d6} 10-26 12:53:30.375 21270-21270 W/Resources﹕ Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f0b00d7}
Usando la información de la respuesta aceptada a esta pregunta , determiné que está tratando de interpretar nulos (0x0) como booleanos (0x12), lo que no tiene sentido, ya que nunca estoy tratando con nulos o booleanos.
- Arrays de recursos
- Recursos de referencia de otro módulo en Android Studio
- ¿Cómo hacer referencia a una cadena en strings.xml de una biblioteca de Android en código?
- ¿Hay algo similar al sistema de recursos de Android en una escala menor?
- Problema en matriz de cadena en archivo xml: se esperan múltiples sustituciones especificadas en formato no posicional y etiqueta encontrada </ item> donde </ string-array> se espera
Los identificadores de recursos de los registros (r = 0x?) Apuntan a los atributos de vista / vista dentro de uno de los dos diseños, que incluiremos a continuación.
Los únicos lugares en mi código en los que hago referencia a esos ID de recursos son a) el CursorAdapter que utiliza el primer diseño, yb) una clase que utiliza el segundo diseño y voy a incluir ese código también.
No estoy seguro si esto es algo de qué preocuparse. Sé que la correlación no implica causalidad, pero cuando LogCat está inundado con esos registros, el desplazamiento a través de mi aplicación es notablemente janky.
Cualquier ayuda con averiguar lo que está pasando sería apreciada.
Archivo de disposición # 1:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="72dp" android:padding="16dp"> <TextView android:id="@+id/event_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:ellipsize="end" android:maxLines="1" android:text="Title" android:textSize="16sp" android:textColor="@color/primary_text_color"/> <TextView android:id="@+id/event_dates" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@id/event_name" android:text="Dates" android:textColor="@color/secondary_text_color" android:textSize="14sp" /> <TextView android:id="@+id/event_location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@id/event_name" android:layout_toLeftOf="@id/event_dates" android:ellipsize="end" android:singleLine="true" android:text="Location" android:textColor="@color/secondary_text_color" android:textSize="14sp" /> </RelativeLayout>
Archivo de disposición # 2:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/event_type" android:textSize="14sp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/primary" android:paddingLeft="16dp" android:paddingTop="8dp" android:paddingBottom="8dp" android:text="Header" android:textColor="#FFFFFF" /> </LinearLayout>
CursorAdapter:
public class EventCursorAdapter extends CursorAdapter { public String getKey(int position) { Cursor c = getCursor(); c.moveToPosition(position); return c.getString(c.getColumnIndex(Database.Events.KEY)); } public EventCursorAdapter(Context context, Cursor c, int flags) { super(context, c, flags); } @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { LayoutInflater inflater = LayoutInflater.from(context); return inflater.inflate(R.layout.list_item_event, viewGroup, false); } @Override public void bindView(View view, Context context, Cursor cursor) { TextView dates = (TextView) view.findViewById(R.id.event_dates); Date startDate = null, endDate = null; Log.d(Constants.LOG_TAG, "Start: " + cursor.getString(cursor.getColumnIndex(Database.Events.START))); try { startDate = new Date(cursor.getLong(cursor.getColumnIndex(Database.Events.START))); endDate = new Date(cursor.getLong(cursor.getColumnIndex(Database.Events.END))); } catch (Exception e) { // Oops. } dates.setText(EventHelper.getDateString(startDate, endDate)); TextView name = (TextView) view.findViewById(R.id.event_name); name.setText(cursor.getString(cursor.getColumnIndex(Database.Events.NAME))); TextView location = (TextView) view.findViewById(R.id.event_location); location.setText(cursor.getString(cursor.getColumnIndex(Database.Events.LOCATION))); } }
Otras clases:
public class EventTypeHeader extends ListHeader { public EventTypeHeader(String title) { super(title); } @Override public View getView(Context c, LayoutInflater inflater, View convertView) { ViewHolder holder; if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) { convertView = inflater.inflate(R.layout.list_item_event_type_header, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.event_type); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(getText()); return convertView; } private static class ViewHolder { TextView text; } }
EDITAR
Voy a incluir lo que cada referencia de recursos de referencia en mi archivo de diseño
0x7f0b00d8: event_type
0xffe51c23: primary
(el color primario de mi aplicación)
0x7f0b008a: event_name
0x7f0b00d6: event_dates
0x7f0b00d7: ubicación_de_evento
Además, tenga en cuenta que esto se está ejecutando en la vista previa 5.0. Sin embargo, todavía vi estos registros cuando estaba en 4.4.4.
EDIT # 2
Después de buscar a través del código fuente de Android, he descubierto que el único lugar que "Convertir a String" existe está en la clase android.content.res.TypedArray
.
Sin embargo, ni siquiera instanciar, importar, o de alguna manera utilizar esa clase en mi proyecto! Esto sólo se vuelve más extraño y más extraño.
EDIT # 3
Por la petición de un comentarista, he subido mi styles.xml
y colors.xml
a una esencia, que se puede encontrar aquí .
- ¿Cómo puedo obtener el ID de recurso del icono de la aplicación en mi aplicación desde una API
- Empaquetado de archivos de recursos de Android dentro de un archivo Jar distribuible
- Error de diseño de Android: "Id de recurso <res_id> no es del tipo STYLE (en lugar de attr)"
- Adición de directorios a carpetas de recursos en Android
- GetQuantityString devuelve cadena incorrecta con valor 0
- ¿Cómo usar getString () en static String antes de onCreate ()?
- ¿Cómo puedo eliminar los recursos no utilizados de las bibliotecas de terceros que he incluido en Android?
- No se puede resolver el atributo desde el espacio de nombres android
Presenté un informe de fallo con el equipo de Android, ya que todavía no podía explicar o solucionar este problema. El informe de errores está aquí . Un comentarista sugirió que desmarque "Habilitar la inspección de atributos de vista" en las Opciones del desarrollador. He aquí, este problema ahora está arreglado! No recuerdo haber comprobado nunca eso, que es extraño, pero por lo menos ahora sé cuáles son las causas de este problema.