Android 查询以选择sqlite数据库中介于今天和#x27;s日期和7天时间
Android 查询以选择sqlite数据库中介于今天和#x27;s日期和7天时间,android,sqlite,Android,Sqlite,公共类ListDataAdapter扩展了ArrayAdapter{ 列表=新的ArrayList(); 公共ListDataAdapter(上下文,int资源){ 超级(上下文、资源); } 静态类layouthHandler{ 文本视图id、主题、任务、截止日期、备注; } @凌驾 公共长getItemId(int位置){ 返回super.getItemId(位置); } @凌驾 公共无效添加(对象){ super.add(object); 列表。添加(对象); } @凌驾 public i
公共类ListDataAdapter扩展了ArrayAdapter{
列表=新的ArrayList();
公共ListDataAdapter(上下文,int资源){
超级(上下文、资源);
}
静态类layouthHandler{
文本视图id、主题、任务、截止日期、备注;
}
@凌驾
公共长getItemId(int位置){
返回super.getItemId(位置);
}
@凌驾
公共无效添加(对象){
super.add(object);
列表。添加(对象);
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回列表。获取(位置);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
LayoutHandler LayoutHandler;
if(行==null){
LayoutInflater LayoutInflater=(LayoutInflater)this.getContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
row=LAYOUTINGFLATER.FLATE(R.LAYOU.row\U LAYOU\U listview,父级,false);
layoutHandler=新的layoutHandler();
layouthHandler.id=(TextView)row.findViewById(R.id.TEXTid);
layouthHandler.subject=(TextView)row.findViewById(R.id.textSubject);
layouthHandler.assignment=(TextView)row.findViewById(R.id.textAssignment);
layouthHandler.dueDate=(TextView)row.findViewById(R.id.textDueDate);
layouthHandler.notes=(TextView)row.findViewById(R.id.notesTextField);
notifyDataSetChanged();
row.setTag(layouthHandler);
}
否则{
layouthHandler=(layouthHandler)行。getTag();
notifyDataSetChanged();
}
DataProvider DataProvider=(DataProvider)this.getItem(位置);
layouthHandler.id.setText(dataProvider.getAssignmentValue());
layouthHandler.subject.setText(dataProvider.getSubject());
layouthHandler.assignment.setText(dataProvider.getAssignment());
layouthHandler.dueDate.setText(dataProvider.getDueDate());
layouthHandler.notes.setText(dataProvider.getNotes());
notifyDataSetChanged();
返回行;
}
}
编辑:我发现您的适配器存在许多问题:
- 好的,现在我看到了
在做什么。我不喜欢这种模式,但我敢打赌你的编译器会抱怨,因为你有数据提供者
公共类ListDataAdapter扩展了ArrayAdapter{
而不是
公共类ListDataAdapter扩展了ArrayAdapter{
甚至
公共类ListDataAdapter扩展了ArrayAdapter{
已经有了自己的内部列表,因此您不需要有自己的ArrayAdapter
字段,甚至不需要覆盖除list
,甚至是构造函数。如果要拥有所有这些方法,您还可以扩展getView()之外的任何方法
。我建议取出BaseAdapter
定义、构造函数和除列表
getView()之外的所有覆盖
- 您在
中调用getView()
,notifyDataSetChanged()
方法,该方法可能足以触发您的notifyDataSetChanged()
列表视图的刷新。但它在
中没有任何作用,您应该将其取出getView()
DataProvider
类没有任何错误,您的状态应该会更好
由以下原因引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.database.Cursor com.ulsteruniversity.eamonn.diary1905.DbHelper.getUpcomingAssignment(android.database.sqlite.SQLiteDatabase)
问题不是您的方法,问题是您没有初始化运行该方法的DBHelper
实例。//我的查询返回带有所选赋值的游标
//My query to return a cursor with the selected assignments
public Cursor getUpcomingAssignment(SQLiteDatabase sqLiteDatabase){
String sql = "SELECT * FROM " + TABLE_NAME_ASSIGNMENT + " WHERE "+ DUE_DATE + " <= date('now','+7 days') AND date('now')";
Cursor mycursor = sqLiteDatabase.rawQuery(sql, null);
Log.e("Database Operations","Method getUpComingAssignment called ");
return mycursor;
}
公共游标getUpcomingAssignment(SQLiteDatabase SQLiteDatabase){
String sql=“从“+表格名称\分配+”中选择*,其中“+到期日+"删除+
符号,它在我的情况下工作正常。+在7之前签名?如果是这样,它仍然会导致它崩溃,我很抱歉是的。同时发布日志猫。这已经解决了这个问题,谢谢!不幸的是,上面新的日志猫消息显示了一个额外的问题?现在你的问题是getUpcomingAssig的参数Nme()
,sqLiteDatabase
未初始化。到目前为止,您所有的问题都在onCreate()
,也许您应该发布您的Main活动的代码。感谢您的输入,我现在还添加了主活动代码OK-因此您添加了这一行sqLiteDatabase=dbHelper.getWritableDatabase()//
这修复了您上次的崩溃吗?是的,克里斯修复了,我还将到期日的数据类型更改为DATE,现在可以停止错误,应用程序可以运行。尽管数据仍然没有显示,但getUpcomingAssignment方法似乎工作不正常?