Android SQLiteDatabase位于顶部的项目中

时间:2016-04-10 15:45:46

标签: android sqlite android-sqlite

我希望所有新项目都添加到顶部,即如果采用ROW-ID 1,2,3并且我添加了一个新项目,则应该在位置1添加它,并且应该移动休息。但是现在当我添加一个项目时,它会在ID 4(即后面)添加。

方式

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        String CREATE_STORIES_TABLE 
                = "CREATE TABLE " + TABLE_TEMP_BASESTORY_LIST 
                + "(" 
                + KEY_ID            + " INTEGER PRIMARY KEY,"
                + KEY_POINTER       + " STRING,"
                + KEY_URI           + " STRING"
                + ")";

        db.execSQL(CREATE_STORIES_TABLE);
    }

_

    // Adding new Story
    public void addStory(String pointer, String filePath) 
    {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_POINTER,  pointer  );
        values.put(KEY_URI,      filePath );

        // Inserting Row
        long id = db.insert(TABLE_TEMP_BASESTORY_LIST, null, values);
        Log.d(TAG, "TempCover ID:" + Long.toString(id));

        db.close(); 
    }

_

public List<StoryData> getAllStories()
{
    List<StoryData> storyDataList = new ArrayList<StoryData>();

    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_STORIES_LIST;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if(cursor !=null)
    {
        if (cursor.moveToFirst()) 
        {
            do 
            {
                ArrayList<Integer> coverList = new ArrayList<Integer>();
                coverList.add( cursor.getInt(4) );
                coverList.add( cursor.getInt(5) );

                StoryData sData = new StoryData
                        (
                        cursor.getInt(0),
                        cursor.getString(1),
                        cursor.getString(2),
                        cursor.getInt(3),
                        coverList,
                        Long.parseLong(cursor.getString(6)),
                        Boolean.parseBoolean(cursor.getString(7)),
                        cursor.getString(8)
                        );

                // Adding contact to list
                storyDataList.add(sData);

            } while (cursor.moveToNext());
        }
    }


    return storyDataList;
}

_

GraphBuilder

1 个答案:

答案 0 :(得分:0)

简单地说,你不能这样做,

直接使用Collections.reverse(storyDataList);可能无效 我建议获取所有数据并使用ID对其进行排序,例如使用Comparable并创建自定义类进行排序,如

public class SortDataCompare implements Comparator<StoryData> {
    @Override
    public int compare(StoryData s1, StoryData s2) {
        return s1.getId().compareTo(s2.getId());
    }
}

并使用像

这样的类
Collections.sort(storyDataList, new SortDataCompare());

然后您的storyDataList将被排序。