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方法似乎工作不正常?