Reputation: 3225
I'm not used to this adapters thing and I'm having a problem with a CursorAdaptor. Here's my classes:
public class TicketsAdapter extends CursorAdapter {
private Cursor cursor;
private Context context;
private final LayoutInflater inflater;
public TicketsAdapter (Context context, Cursor cursor) {
super(context, cursor, FLAG_REGISTER_CONTENT_OBSERVER);
this.cursor = cursor;
this.context = context;
inflater = LayoutInflater.from(context);
}
public void bindView(View view, Context context, Cursor cursor) {
//cursor.moveToFirst(); I have tried this, same error
//try { I have used this 'try' and find out here's the code where an exception is being throwed
TextView ticketId = (TextView) view.findViewById(R.id.ticketId);
TextView ticketCourse = (TextView) view.findViewById(R.id.ticketCourse);
TextView ticketDate = (TextView) view.findViewById(R.id.ticketDate);
TextView ticketTime = (TextView) view.findViewById(R.id.ticketTime);
RelativeLayout row = (RelativeLayout) view.findViewById(R.id.ticketRow);
TextView jogodaveia = (TextView) view.findViewById(R.id.textView1);
ticketId.setText(cursor.getString(cursor.getColumnIndex("ticket_id")));
ticketCourse.setText(cursor.getString(cursor.getColumnIndex("course")));
ticketDate.setText(cursor.getString(cursor.getColumnIndex("date")));
ticketTime.setText(cursor.getString(cursor.getColumnIndex("departure")));
String present = cursor.getString(cursor.getColumnIndex("present"));
if (present.equals("0")) {
row.setBackgroundColor(Color.rgb(210, 245, 210));
jogodaveia.setTextColor(Color.rgb(16, 181, 4));
} else {
row.setBackgroundColor(Color.rgb(255, 255, 255));
jogodaveia.setTextColor(Color.rgb(206, 109, 0));
}
//} catch (Exception e) {android.util.Log.w("ADAPTER", e.toString());}
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view = inflater.inflate(R.layout.ticket,parent,false);
return view;
}
}
And in my Tickets.java I have:
public class Tickets extends ListActivity {
private SQLiteDatabase db=null;
private Cursor cursor=null;
private ListView layout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tickets);
layout = getListView();
layout.setDividerHeight(3);
db = (new DatabaseHelper(this)).getWritableDatabase();
cursor = db.rawQuery("SELECT _id, ticket_id, course, date, departure FROM tickets ORDER BY date",
null);
//cursor.moveToFirst(); I have tried this here too
layout.setAdapter(new TicketsAdapter (Tickets.this, cursor));
}
....
}
The error I get is
Failed to read row 0, column -1 from a CursorWindow which has 5 rows, 5 columns.
11-15 00:03:30.700: W/ADAPTER(1756): java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
BUT, still my list is shown, but does not works fine. Any ideas of what I'm doing wrong?
Upvotes: 0
Views: 520
Reputation: 86948
Failed to read row 0, column -1
This means that one of your columns was not found, the row index is fine.
Here you ask for "present"
:
String present = cursor.getString(cursor.getColumnIndex("present"));
But you forgot "present"
in your query:
cursor = db.rawQuery("SELECT _id, ticket_id, course, date, departure FROM tickets ORDER BY date", null);
Also you should find all of your Views in newView()
once and store them in a ViewHolder. The same is true for your column indices. There is no need to repeatedly search for the same information and this will give you a faster app.
Upvotes: 2