我不习惯这个适配器的东西,我遇到了CursorAdaptor的问题。这是我的课程:
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;
}
}
在我的Tickets.java中,我有:
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));
}
....
}
我得到的错误是
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.
但仍然显示我的列表,但不能正常工作。对我做错了什么想法?
答案 0 :(得分:2)
Failed to read row 0, column -1
这意味着找不到您的列之一,行索引正常。
在这里,您要求"present"
:
String present = cursor.getString(cursor.getColumnIndex("present"));
但您在查询中忘记了"present"
:
cursor = db.rawQuery("SELECT _id, ticket_id, course, date, departure FROM tickets ORDER BY date", null);
此外,您应该在newView()
中找到所有观看次数并将其存储在ViewHolder中。您的列索引也是如此。无需重复搜索相同的信息,这将为您提供更快的应用程序。