2016-04-10 19 views
0

Tüm yeni öğelerin en üste eklenmesini istiyorum, örneğin, ROW-ID 1,2,3 alındıysa ve yeni bir öğe eklediğimde, bu konum 1'e eklenmeli, ve dinlenme kaydırılmalıdır. Ama şimdi bir ürün eklediğimde, ID 4'e ekleniyor (yani arkada).Android SQLiteDatabase en üstteki öğeden

yöntem

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

Yapamazsınız! Bunun yerine, verileri neden azalan sırada almıyorsunuz? –

+0

getAllStories() yönteminin kodunu ekledim; Collections.reverse (storyDataList) kullanmalı mıyım? listeyi geri göndermeden önce; Ya da başka bir yol var mı? // @ ShreeKrishna – Zen

+0

SQL tabloları sipariş edilmez; ORDER BY olmadan bir sorgu, sıraları herhangi bir sırayla döndürebilir. Yani "top" ile ne demek istiyorsun? –

cevap

0

basitçe söylemek için

Doğrudan Collections.reverse(storyDataList); Ben tüm verileri alma ve bunları ayıklamaya öneririz böylece çalışmayabilir kullanarak ID burada,

gibi sınıf Comparable kullanarak ve benzeri

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

sıralamak için özel bir sınıf oluşturulur ve kullanmak gibi

Collections.sort(storyDataList, new SortDataCompare()); 

Ardından, storyDataList ürününüz sınıflandırılacaktır.

+0

Sadece bir not. Bu dönüşü kullanarak bir "ilkel int türünde compareTo (int) çağrısı" verir ": http://stackoverflow.com/a/14178549/2534694 – Zen

+0

@summers Teşekkürler, notunuzu takdir ediyorum. –

0

SQL satırının autoincrement kimliğini değiştirmeye çalıştığınız anlaşılıyor. Yeni bir satır oluşturduğunuzda bu otomatik olarak ayarlanır. Otomatik değerleme kimliğini ayarlayamaz veya en azından ayarlamamalı ya da tablodaki satırların fiziksel sırasına bağlı değilsiniz.

Tamsayı olarak istenen sıra sırasını içeren ayrı bir sütun oluşturmak daha iyi bir uygulamadır. Daha sonra, tabloyu sorguladığınızda, satırları o sütundaki tam sayıya göre sıralayabilirsiniz. Aşağıda görüldüğü gibi

Bu sütunu ekleyebilirsiniz: öğe eklediğinizde

@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); 
    } 

Şimdi sipariş ekleyin. Sadece bir satır eklemek her zaman sipariş için değerini artırmak: Bu kadar yapamaz,

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. Sadece en üstte yeni değerler eklemek istiyorum. – Zen

+0

Neden ilk satır olarak ekleniyor? Satırları her zaman herhangi bir sırada görüntüleyebilirsiniz. Herhangi bir Kimlik olsun, onu üstte veya altta görüntüleyebilirsiniz –

+0

Tamam. Ama ArrayList yeniden düzenlemek için KEY_ORDER özelliğini nasıl kullanırım? – Zen

İlgili konular