Conversão de TypedValue para String
Em pontos aleatórios enquanto uso meu aplicativo Android, o LogCat é inundado com dezenas de repetições das 5 linhas a seguir:
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 as informações da resposta aceita paraessa questão, Determinei que ele está tentando interpretar nulos (0x0) como booleanos (0x12), o que não faz sentido, pois nunca estou lidando com nulos ou booleanos.
As IDs de recurso dos logs (r = 0x?) Apontam para visualizações / visualizações de atributos em um dos dois layouts, que incluiremos abaixo.
Os únicos lugares no meu código onde faço referência a esses IDs de recursos são: a) o CursorAdapter que usa o primeiro layout eb) uma classe que usa o segundo layout e incluirei esse código também.
Não tenho certeza se isso é algo para se preocupar. Sei que a correlação não implica causalidade, mas quando o LogCat é inundado com esses logs, a rolagem no meu aplicativo é visivelmente irregular.
Qualquer ajuda para descobrir o que está acontecendo seria apreciada.
Arquivo de layout 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>
Arquivo de layout 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)));
}
}
Outra classe:
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
Vou incluir o que cada ID de recurso faz referência no meu arquivo de layout
0x7f0b00d8:event_type
0xffe51c23:primary
(cor principal do meu aplicativo)
0x7f0b008a:event_name
0x7f0b00d6:event_dates
0x7f0b00d7:event_location
Além disso, observe que isso está sendo executado na versão 5.0. No entanto, ainda vi esses logs de volta quando estava no 4.4.4.
EDIT # 2
Depois de pesquisar no código-fonte do Android, descobri que o único lugar que "Convertendo em String" existe é na classeandroid.content.res.TypedArray
.
No entanto, eu nunca instancia, importo ou de alguma forma uso essa classe no meu projeto! Isso fica cada vez mais estranho.
EDIT # 3
Por solicitação de um comentarista, carreguei meustyles.xml
ecolors.xml
a uma essência, que pode ser encontradaaqui.