2016-04-10 11 views
0

ROW-ID 1,2,3を取得して新しい項目を追加すると、新しい項目がすべて1番上に追加されます。残りはシフトされるべきである。しかし、今はアイテムを追加すると、ID 4(つまり、背中)に追加されます。Android SQLiteDatabase on item

方法

Temp_Cover_StoryBaseList_DatabaseHandler db = new Temp_Cover_StoryBaseList_DatabaseHandler(context, currentUsername); 
db.addStory(pointer, filePath); 
db.close(); 

_

// 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; 
} 
+0

あなたはできません!代わりに、降順でデータを取得してみませんか? –

+0

getAllStories()メソッドのコードを追加しました。私はちょうどCollections.reverse(storyDataList)を使用する必要があります。リストを返す前にまたは別の方法がありますか? // @ ShreeKrishna – Zen

+0

SQLテーブルは注文されません。 ORDER BYのないクエリは、任意の順序で行を返すことができます。では、「トップ」とはどういう意味ですか? –

答えて

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がソートされます。

+0

ちょうどメモ。この戻り値を使用すると、「プリミティブ型intでcompareTo(int)を呼び出せません」というメッセージが表示されます。http://stackoverflow.com/a/14178549/2534694 – Zen

+0

@summersありがとう、ご迷惑をおかけして申し訳ありません。 –

0

SQL行の自動インクリメントIDを変更しようとしているようです。これは、新しい行を作成すると自動的に設定されます。自動インクリメントIDを設定することはできませんし、少なくともテーブルの行の物理的な順序に依存することはできません。

目的の行の順序を整数として含む別の列を作成することをお勧めします。次に、テーブルをクエリすると、その列の整数に基づいて行を並べ替えることができます。下図のように

あなたは、列を追加することができます:あなたがアイテムを挿入したとき

@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," 
       + KEY_ORDER   + " INTEGER" 
       + ")"; 

     db.execSQL(CREATE_STORIES_TABLE); 
    } 

今すぐオーダーを追加します。ただ、オーダーのためにあなたが行を挿入するたびに値をインクリメント:

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

// Inserting Row 
long id = db.insert(TABLE_TEMP_BASESTORY_LIST, null, values); 
+0

Nop。私はちょうど底ではなく上に新しい値を追加したい – Zen

+0

なぜあなたは最初の行として追加することを主張するのですか?いつでも行を任意の順序で表示することができます。あなたはそれを上から下に表示することができます。 –

+0

いいえ。しかし、KEY_ORDERプロパティを使用してArrayListの順序を変更するにはどうすればよいですか? – Zen

関連する問題