Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取基于特定日期的所有数据?_Java_Android_Android Sqlite_Android Database_Android Date - Fatal编程技术网

Java 如何获取基于特定日期的所有数据?

Java 如何获取基于特定日期的所有数据?,java,android,android-sqlite,android-database,android-date,Java,Android,Android Sqlite,Android Database,Android Date,我正在使用SQLite存储我的信息我将日期存储为字符串格式。现在我想根据日期获取数据,一个日期可能有多个数据。我已经检查了相关问题并尝试了我的方法,但找不到解决方案。虽然我能够获得特定日期的单个数据的信息。 从数据库获取数据的我的代码: public ArrayList<ExpenseModel> getSingleExpenseDetails(String date){ SQLiteDatabase sqLiteDatabase=this.getReadableDataba

我正在使用SQLite存储我的信息我将日期存储为字符串格式。现在我想根据日期获取数据,一个日期可能有多个数据。我已经检查了相关问题并尝试了我的方法,但找不到解决方案。虽然我能够获得特定日期的单个数据的信息。

从数据库获取数据的我的代码:

public ArrayList<ExpenseModel> getSingleExpenseDetails(String date){
    SQLiteDatabase sqLiteDatabase=this.getReadableDatabase();
    String query = "select * from " + TABLE_SAVE_EXPENSE + " where "+ COLUMN_EXPENSE_DATE+ " = '" + date+ "'";
    Cursor cursor=sqLiteDatabase.rawQuery(query, null);
    ExpenseModel expenseModel=new ExpenseModel();
    ArrayList<ExpenseModel> expenseModels = new ArrayList<>();
    Log.v("Title : ",""+title);
    if (cursor.moveToFirst()){
        do {
            expenseModel.setTitle(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
            expenseModel.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DESCRIPTION)));
            expenseModel.setAmount(cursor.getInt(cursor.getColumnIndex(COLUMN_EXPENSE_AMOUNT)));
            expenseModel.setDate(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DATE)));
            expenseModel.setCurrency(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_CURRENCY)));
            Log.v("Info : ",""+cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
            expenseModels.add(expenseModel)
        }while (cursor.moveToNext());
    }
    cursor.close();
    sqLiteDatabase.close();
    return expenseModels;
}
package app.shakil.com.dailyexpense.Models;

public class ExpenseModel {
    private int id;
    private String title;
    private String description;
    private String date;
    private int amount;
    private String currency;

public ExpenseModel(){

}

public ExpenseModel(String title,String description,String date,int amount,String currency){
    this.title=title;
    this.description=description;
    this.date=date;
    this.amount=amount;
    this.currency=currency;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public int getAmount() {
    return amount;
}

public void setAmount(int amount) {
    this.amount = amount;
}

public String getCurrency() {
    return currency;
}

public void setCurrency(String currency) {
    this.currency = currency;
}
}

您在代码中犯的一个明显错误是,在循环之前初始化
expenseModel
,并在循环内部对所有行使用它:

ExpenseModel expenseModel=new ExpenseModel();
在循环中移动该行:

do {
    ExpenseModel expenseModel=new ExpenseModel();   
    expenseModel.setTitle(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
    expenseModel.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DESCRIPTION)));
    expenseModel.setAmount(cursor.getInt(cursor.getColumnIndex(COLUMN_EXPENSE_AMOUNT)));
    expenseModel.setDate(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DATE)));
    expenseModel.setCurrency(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_CURRENCY)));
    Log.v("Info : ",""+cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
    expenseModels.add(expenseModel)
}while (cursor.moveToNext()); 

如果
date
列的格式为
column\u EXPENSE\u date
,则代码应该正常工作。格式相同,但当一个日期有多个数据时会出现问题。什么问题?您将获得该日期的所有行。它无法找到该指定日期的所有数据,并返回一个空的ExpenseModel。然后您没有传递正确的日期值或格式。谢谢,这解决了我的问题。但我从来没有这样想过。