Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Android 我的数据库查询显示按字母顺序对值进行排序_Android_Sqlite - Fatal编程技术网

Android 我的数据库查询显示按字母顺序对值进行排序

Android 我的数据库查询显示按字母顺序对值进行排序,android,sqlite,Android,Sqlite,我一直试图在不寻求帮助的情况下解决这个问题,但我已经到了无法解决的地步 以下是我用来查询数据库的函数,为了保密,我不得不更改名称: public Cursor getAllItems(){ Cursor cursor = db.query(true, DATABASE_TABLE, new String []{KEY_NAME, KEY_1,KEY_2, KEY_3, KEY_4, KEY_5, KEY6, KEY_7, K

我一直试图在不寻求帮助的情况下解决这个问题,但我已经到了无法解决的地步

以下是我用来查询数据库的函数,为了保密,我不得不更改名称:

public Cursor getAllItems(){
    Cursor cursor = db.query(true, DATABASE_TABLE, new String []{KEY_NAME, KEY_1,KEY_2, KEY_3,
                KEY_4, KEY_5, KEY6,
                KEY_7, KEY_8, KEY_9, KEY_10, KEY_11, KEY_12,
                KEY_13}, null, null, null, null, null, null);
    cursor.moveToFirst();

    return cursor;
}
这是我填充使用xml创建的tablelayout的地方

public void populate(){
    db = new DBAdapter(this);

    TableLayout TL = (TableLayout)findViewById(R.id.table);        

    db.open();  
    c = db.getAllItems();       
    while(!c.isAfterLast()){
        if(Integer.toString(c.getPosition())!=null){
        TableRow TR = new TableRow(this);

        TR.setId(c.getPosition());

        TextView column1 = new TextView(this);
        TextView column2 = new TextView(this);
        TextView column3 = new TextView(this); 

        TR.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));         

        column1.setGravity(0x01);
        column1.setTextColor(0xff000000);
        column1.setTextSize(2,20);
        //column1.setText(c.getString(3)); 
        column1.setText(Integer.toString(c.getPosition()));
        TR.addView(column1);                

        column2.setGravity(0x01);
        column2.setTextColor(0xff000000);
        column2.setTextSize(2,20);
        column2.setText(c.getString(0));
        TR.addView(column2);        

        column3.setGravity(0x01);
        column3.setTextColor(0xff000000);
        column3.setTextSize(2,20);
        //column3.setText(c.getString(1));
        column3.setText(Integer.toString(TR.getId()));
        TR.addView(column3);


        TR.setOnLongClickListener(this);
        TL.addView(TR);  

        1Total += c.getDouble(1);
        2Total += c.getDouble(2);
        }
        c.moveToNext();
    }
    db.close();
如果我使用DDMS查看数据库,则所有内容都会按照正确的顺序显示,即插入表的顺序。但是,当我尝试在tablelayout中显示数据时,出于某种原因,它会根据KEY_NAME值组织值。因此,如果我像B-C-D-A-E那样将数据插入表中,它将用A-B-C-D-E填充我的表布局

奇怪的是,我将其设置为在任何给定行上长按一下,生成一个显示其余信息的dialogfragment,并且该信息是正确的。因此,如果使用上面的示例,我长时间单击显示的C行,那么我将实际获得D的数据,这是正确的


有什么想法吗?

在SQLiteDatabase类的javadocs中,对于查询方法,它说传递null[对于排序顺序]将使用默认排序顺序,这可能是无序的。该null是您要传递的众多null之一,因此顺序可能是无序的,但显然它可能是有序的

也许可以尝试使用而不是查询

所以我认为你的情况是

公共查询字符串选择不同的键名称、键1、键2、键3, 键4,键5,键6,键7,键8,键9,键10,键11,键12, 数据库表中的键13,null


根据我的经验,androidsqlite以插入顺序返回rawQuery结果,尽管我不确定是否需要这样做。一个更可靠的方法是添加自动递增键列(基本上是给每行一个序列号),然后对查询结果进行排序。

我将接受这个答案作为解决方案。他们认为我解决问题的方法基本上就是你在第二部分所说的。我已经有了一个自动递增的id,但我没有做的是在查询语句中返回id。我还对查询函数调用进行了如下编辑:Cursor Cursor=db.queryDATABASE_TABLE,新字符串[]{KEY_ROWID,KEY_NAME,KEY_1,KEY_2,KEY_3,KEY_4,5,KEY_6,KEY_7,KEY_8,KEY_9,KEY_10,KEY_11,KEY_12,KEY_13},null,null,null,null,KEY_ROWID;