【问题标题】:How to filter/sort view based on date range in android using java?如何使用java根据android中的日期范围过滤/排序视图?
【发布时间】:2022-02-14 21:40:09
【问题描述】:

    else if (item.getItemId() == R.id.sort_by_unprofitable_trades){
        Collections.sort(notesList, Model.UnProfitableTrades);
        adapter.notifyDataSetChanged();
    }
    else if(item.getItemId() == R.id.sort_by_date_range){
        materialDatePicker.show(getSupportFragmentManager(), "Tag_picker");
        materialDatePicker.addOnPositiveButtonClickListener(new 
        MaterialPickerOnPositiveButtonClickListener<Pair<Long, Long>>() {
            @Override
            public void onPositiveButtonClick(Pair<Long,Long> selection) {
                Long selctedstartDate = selection.first;
                Long selectedendDate = selection.second;
                startDateString = DateFormat.format("yyyy/MM/dd", new 
                Date(selctedstartDate)).toString();
                endDateString = DateFormat.format("yyyy/MM/dd", new 
                 Date(selectedendDate)).toString();
                //Collections.sort(notesList, Model.SortByDaterange);
                sortByDateRange();
                adapter.notifyDataSetChanged();

DataBase 类:- void sortbyDateRange(String startDate, String endDate){ SQLiteDatabase 数据库 = this.getWritableDatabase(); 字符串查询 = "SELECT * FROM " + TableName + " WHERE " + ColumnTradeDate + " BETWEEN " + 开始日期+“与”+结束日期; 数据库.execSQL(查询); }

在 Database Inspector 中,SQL 查询给出了正确的结果,但回收器视图中没有发生任何变化。我错过了什么?

【问题讨论】:

    标签: java android android-recyclerview date-range


    【解决方案1】:

    between 查询不支持任何字符串值。因为在字符串值比较中不可能,所以你需要使用浮点数、整数和长类型数据进行操作。我遇到了同样的问题,然后我使用 calender.timeInMillis 将我的日期转换为长类型数据。如果你喜欢你必须在你的表中创建一个长类型的列而不是发送到你的数据库然后在查询之间做

    选择您的日期并将其转换为长类型

       val datepickerdialog =
                DatePickerDialog(requireContext(), { view, year, monthOfYear, dayOfMonth ->
    
                    
                    srchDate2_id.text = "$dayOfMonth-$month-$year"
    
                    calender2 = Calendar.getInstance()
                    calender2.set(Calendar.DAY_OF_MONTH, dayOfMonth)
                    calender2.set(Calendar.MONTH, monthOfYear)
                    calender2.set(Calendar.YEAR, year)
    
    
                    dt2 = calender2 .timeInMillis// send it to database you can do the between query with this value 
                    Log.d(TAG, "first time: $dt2")
                  
    
                }, y, m, d)
    
            datepickerdialog.show()
        }
    

    下面还有问题评论。

    【讨论】:

    • 嗨 Mahmud,我发现我们可以在文本上使用 BETWEEN 运算符,请参阅示例 w3schools.com/sql/sql_between.asp 。附上数据库检查器的屏幕截图,上面代码中的查询给出了正确的结果
    • 由于声誉较低,无法上传屏幕截图,但此查询有效:SELECT * FROM mynotes WHERE tradeDate BETWEEN "2022/01/01" AND "2022/02/13" ,这里所有日期都在字符串格式,甚至tradeDate列也是字符串类型。
    • sql 、 mysql 、 oracle 、 sqlite 都相似但不一样 .. 我也尝试过使用日期类型的数据但失败了.. 比我使用长类型数据做的那样,因为在某些应用程序中你会看到几个月像 2022/Feb/13 或 13-02-2022 一样显示,您将再次面临另一个问题,因为 sqlite 不支持这些格式 tutorialspoint.com/sqlite/sqlite_date_time.htm .. 我认为使用这个原始系统您不会遇到错误.. 正如我尝试过的那样转换为毫秒是最好的尝试。
    • 如果您仍想尝试使用字符串,请查看这些答案stackoverflow.com/questions/9649709/…
    猜你喜欢
    • 2016-11-25
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多