【问题标题】:Cannot show first Data from Date无法显示日期的第一个数据
【发布时间】:2014-08-07 03:01:54
【问题描述】:

我有一些关于从数据库 sqlite 显示数据的问题。 如果我想显示像 startdate 和 enddate 这样的日期的数据。 2014 年 1 月 1 日至 2014 年 3 月 1 日之间的示例。为什么数据只显示 02/01/2014 - 03/01/2014? 2014 年 1 月 1 日的数据在哪里?

如果要显示 01/01/2014 和 01/01/2014 之间的数据,数据不能显示?

这是我拥有的程序:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/cover" >

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="150dp"
    android:layout_marginLeft="10dp" >

    <TextView
            android:id="@+id/no_id"
        android:layout_width="30dip"
        android:text="@string/id_label"
        android:textStyle="bold" />
    <TextView
        android:id="@+id/date"
        android:layout_width="70dip"
    android:text="@string/date_label"
    android:textStyle="bold" />

    <TextView
            android:id="@+id/time"
            android:layout_width="90dip"
            android:text="@string/time_label"
            android:textStyle="bold" />

    <TextView
    android:id="@+id/status"
    android:layout_width="100dip"
    android:text="@string/status_label"
        android:textStyle="bold" /> 
</TableRow>    

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="170dp"
    android:layout_marginBottom="40dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TableLayout
        android:id="@+id/tabel_log"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp">

        <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp" >
            <View
                    android:id="@+id/no_id1"
                    android:layout_width="30dip" />
                <View
                    android:id="@+id/date1"
                    android:layout_width="70dip" />
                <View
                    android:id="@+id/time1"
                    android:layout_width="90dip" />        
                <View
                    android:id="@+id/status1"
                    android:layout_width="100dip" />  
        </TableRow>
    </TableLayout>

   </LinearLayout>
</ScrollView>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="@string/log"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textSize="12pt"
    android:textStyle="bold" />

<Button
    android:id="@+id/btnSetDate1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="140dp"
    android:layout_height="35dp"
    android:layout_alignLeft="@+id/tableRow1"
    android:layout_below="@+id/textView1"
    android:text="@string/firstdate"
    android:textStyle="bold" />

<Button
    android:id="@+id/btnSetDate2"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="140dp"
    android:layout_height="35dp"
    android:layout_alignLeft="@+id/btnSetDate1"
    android:layout_below="@+id/btnSetDate1"
    android:text="@string/enddate"
    android:textStyle="bold" />

<Button
    android:id="@+id/btnShow"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="100dp"
    android:layout_height="40dp"
    android:layout_alignRight="@+id/tableRow1"
    android:layout_below="@+id/btnSetDate2"
    android:text="@string/show"
    android:textStyle="bold" />

<TextView
    android:id="@+id/txtStartDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/btnSetDate1"
    android:layout_alignBottom="@+id/btnSetDate1"
    android:layout_alignRight="@+id/btnShow"
    android:layout_marginRight="21dp"
    android:text="@string/blank"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textStyle="bold" />

<TextView
    android:id="@+id/txtEndDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/btnSetDate2"
    android:layout_alignBottom="@+id/btnSetDate2"
    android:layout_alignLeft="@+id/txtStartDate"
    android:text="@string/blank"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textStyle="bold" />

<Button
    android:id="@+id/btnClear"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="100dp"
    android:layout_height="40dp"
    android:layout_alignBaseline="@+id/btnShow"
    android:layout_alignBottom="@+id/btnShow"
    android:layout_alignRight="@+id/btnSetDate2"
    android:text="@string/clear"
    android:textStyle="bold" />

</RelativeLayout>

这是数据库适配器:

public ArrayList<ArrayList<Object>> ambilBarisDate(String startDate, String endDate){
    ArrayList<ArrayList<Object>> dataArray = new 
            ArrayList<ArrayList<Object>>();
    Cursor cur;
    try{
        cur = db.rawQuery("SELECT * FROM LOGSTAT WHERE DATE BETWEEN '"+startDate+"' AND '"+endDate+"'", null);//DIPERBAIKI

        cur.moveToFirst();

    if(!cur.isAfterLast()){
        do{
            ArrayList<Object> dataList = new ArrayList<Object>();
            dataList.add(cur.getLong(0));
            dataList.add(cur.getString(1));
            dataList.add(cur.getString(2));
            dataList.add(cur.getString(3));
            dataArray.add(dataList);
        }while (cur.moveToNext());
    }
    }catch (Exception e){
        e.printStackTrace();
        Log.e("DB ERROR", e.toString());
        Toast.makeText(context, "Gagal Ambil Date Baris: "+e.toString(), Toast.LENGTH_SHORT).show();
    }
    return dataArray;
}

还有这个java程序:

protected void updateTable(){
while (table4data.getChildCount() > 1){
    table4data.removeViewAt(1);
}

String startDate = DateText1.getText().toString();
String endDate = DateText2.getText().toString();

ArrayList<ArrayList<Object>> data = logstatsdatabase.ambilBarisDate(startDate, endDate);
for (int posisi = 0; posisi < data.size(); posisi++){
    TableRow tabelBaris = new TableRow(this);
    ArrayList<Object> baris = data.get(posisi);

    TextView idTxt = new TextView(this);
    idTxt.setText(baris.get(0).toString());
    tabelBaris.addView(idTxt);

    TextView dateTxt = new TextView(this);
    dateTxt.setText(baris.get(1).toString());
    tabelBaris.addView(dateTxt);

    TextView timeTxt = new TextView(this);
    timeTxt.setText(baris.get(2).toString());
    tabelBaris.addView(timeTxt);

    TextView statusTxt = new TextView(this);
    statusTxt.setText(baris.get(3).toString());
    tabelBaris.addView(statusTxt);

    table4data.addView(tabelBaris);
    }
}  

【问题讨论】:

  • 是因为这个吗? protected void updateTable(){ while (table4data.getChildCount() > 1){ table4data.removeViewAt(1); }
  • 那么我应该怎么做@JavaLearner?删除受保护或更改为公开?

标签: java android sqlite date


【解决方案1】:

让你有一组数字1-100。然后你说在 (30-60) 之间,它会返回 31,32....58,59。如果你想在你的范围内包含 30 和 60,你应该调用 between(29,61)。我认为这回答了您查询的第一部分。

第二部分 between(1,1) 将始终为空。因此,在您的情况下,如果您希望获取 2014 年 1 月 1 日至 2014 年 1 月 1 日之间特定日期的一些事件:

  1. 在这种情况下,您可以省略使用 between 运算符而使用 equals 运算符
  2. 或者使用 Calendar.getInstance().getTimeInMilis() 将您的日期存储在一个 LONG 格式中。然后,您可以更精确地使用 between 操作来包含时间范围。

【讨论】:

  • 是的,您的所有建议都已完成,但仍然无法显示我想要显示的日期.. 困惑?
  • 尝试使用静态参数来测试函数并发布更新的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多