2016-02-09 2 views
0

Я новичок в программировании на Android. Я все еще практикую и делаю это простое приложение. Я хочу получить 2 строки за обновление из базы данных SQLite и отобразить в списке.ANDROID: Получите n строк из базы данных SQLite с помощью Swipe для обновления

Но то, что я получаю сейчас, это первые 2 строки снова и снова.

У моей базы данных уже есть данные с 6 строками.

Я не знаю, как передать смещение в действие базы данных и как получить следующие 2 строки.

Большое вам спасибо за ваше время. Я надеюсь, что кто-то может мне помочь.

Pls увидеть мой код ниже:

DisplayItem.java

public class DisplayItem extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener { 

private String TAG = DisplayItem.class.getSimpleName(); 
private SwipeRefreshLayout swipeRefreshLayout; 

private ListView list_view; 
private SwipeAdapter adapter; 
private List<Item> itemList; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.display_item); 

    list_view = (ListView) findViewById(R.id.lvDisplay); 

    itemList = new ArrayList<>(); 
    adapter = new SwipeAdapter(this, itemList); 
    list_view.setAdapter(adapter); 

     swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); 
     swipeRefreshLayout.setOnRefreshListener(this); 
     swipeRefreshLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       fetchItems(); 
      } 
    }); 

} 

@Override 
public void onRefresh() { 
    fetchItems(); 
} 

public void fetchItems() { 
    swipeRefreshLayout.setRefreshing(true); 

    DatabaseOperations db_op_sw = new DatabaseOperations(this); 
    SQLiteDatabase db = db_op_sw.getReadableDatabase(); 
    Cursor display_cursor_swipe = db_op_sw.displaySwipeInfo(db); 

    String name; 
    int id, qty, price; 
    int offSet = 0; 

    if (display_cursor_swipe.moveToFirst()) { 

     do { 
      id = display_cursor_swipe.getInt(display_cursor_swipe.getColumnIndex(ItemContract.ItemEntry.ID)); 
      name = display_cursor_swipe.getString(display_cursor_swipe.getColumnIndex(ItemContract.ItemEntry.NAME)); 
      qty = display_cursor_swipe.getInt(display_cursor_swipe.getColumnIndex(ItemContract.ItemEntry.QTY)); 
      price = display_cursor_swipe.getInt(display_cursor_swipe.getColumnIndex(ItemContract.ItemEntry.PRICE)); 
      Item item = new Item(id, name, qty, price); 
      itemList.add(item); 
      offSet = offSet + id; 
     } while (display_cursor_swipe.moveToNext()); 

     adapter.notifyDataSetChanged(); 
    } 

    swipeRefreshLayout.setRefreshing(false); 
} 

} 

DatabaseOperations.java

public class DatabaseOperations extends SQLiteOpenHelper { 

private static final int DB_VERSION = 1; 
private static final String DB_NAME = "item_info.db"; 
private static final String CREATE_QUERY = "create table " + ItemContract.ItemEntry.TABLE_NAME + 
              "(" + ItemContract.ItemEntry.ID + " text," 
              + ItemContract.ItemEntry.NAME + " text," 
              + ItemContract.ItemEntry.QTY + " integer," 
              + ItemContract.ItemEntry.PRICE + " integer);"; 

public DatabaseOperations(Context context) { 
    super(context, DB_NAME, null, DB_VERSION); 
    Log.d("Database Operations", "Database successfully created"); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_QUERY); 
    Log.d("Database Operations", "Table successfully created"); 
} 

public Cursor displaySwipeInfo(SQLiteDatabase db) { 

    String[] projections = {ItemContract.ItemEntry.ID, ItemContract.ItemEntry.NAME, 
      ItemContract.ItemEntry.QTY, ItemContract.ItemEntry.PRICE}; 

    Cursor display_cursor_swipe = db.query(ItemContract.ItemEntry.TABLE_NAME, projections, null, null, null, null, null, null, "2"); 
    Log.d("Database Operations", "Viewed row"); 
    return display_cursor_swipe; 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

}

ответ

0

Вы по праву track :)

Таким образом, 2 - это предел, заданный в запросе. Вы также можете установить смещение, запрос в этом месте. Вы можете сохранить счетчик для подсчета обновлений и использовать его для создания смещения.

Cursor display_cursor_swipe = db.query(ItemContract.ItemEntry.TABLE_NAME, projections, null, null, null, null, null, null, offset+",2"); //offset,limit 

или

Cursor display_cursor_swipe = db.query(ItemContract.ItemEntry.TABLE_NAME, projections, null, null, null, null, null, null, "limit "+2+",offset "+offset);// limit 2 offset 3 

или

you could resort to db.rawQuery(SQLSTATEMENT); // SQLSTATEMENT is select statement in string which has LIMIT,OFFSET set on it. 
+0

Привет, спасибо большое за ответ :) я до сих пор не знаю, как передать смещение от DisplayItem.java to DatabaseOperation.java –

+1

Возможно, сначала возьмите общее количество записей в db во время onCreate. Отправьте это значение в ваши fetchItems. Для каждого приращения обновления счетчик, который учитывает общее количество записей и устанавливает смещение на основе счетчика. Передайте это значение смещения для отображения методаSwipeInfo в качестве аргумента и используйте его в своем запросе – Richie

+0

Привет, Большое вам спасибо за ответ. Мне действительно тяжело, потому что я не знаю, как передать значение смещения методу displaySwipeInfo. Можете ли вы мне помочь с кодом? Спасибо большое! –