2013-11-25 1 views
0

У меня есть приложение для новостей, и приложение имеет собственный gridView, который состоит из appTitle, appNewNewsCount.Я использую правильный подход для чтения из базы данных

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

В моя деятельность, которая имеет GridView, я использовать эту функцию, которая указывает на мой SQLiteOpenHelper базы данных класс:

я вызываю функцию, используя этот кусок кода:

Toast.makeText(getApplicationContext(), String.valueOf(getNumberofNews("Political")), Toast.LENGTH_LONG).show(); 

и код функции является:

private int getNumberofNews(String categoryRequested) { 
     DB_New_Handler obj = null; 
     try{ 
      obj = new DB_News_Handler(getApplicationContext()); 
      int newNews = obj.getNumberOfNewNews(categoryRequested); 
      if (newNews > 0) { 
       return newRings; 
      } 
     }catch (Exception ex){ 
      Log.d("getNumberofNews: ", ex.toString()); 
     }finally{ 
      if (obj != null){ 
       obj.close(); 
      } 
     } 
     return 0; 
    } 

И это функция я использую в SQLiteOpenHelper собрать ряд новых новостей:

public int getNumberOfNewNews(String categoryName) { 
     SQLiteDatabase db = null; 
     Cursor cursor = null; 
     try{ 
      db = this.getReadableDatabase(); 

      cursor = db.query(TABLE_NEWS, new String[] { KEY_ID, 
       KEY_NEWS_ID, KEY_NAME, KEY_CATEGORY, KEY_Package_Id, 
       KEY_FAVORITE, KEY_DATE, KEY_NEW_ADDED }, KEY_CATEGORY + "=?", 
       new String[] { categoryName }, null, null, null, null); 

      if (cursor != null) 
       cursor.moveToFirst(); 

      Log.d(categoryName + " has ", cursor.getCount() + " new News"); 
      return cursor.getCount(); 
     }catch (Exception ex){ 
      Log.d("getNumberOfNewNews: ", ex.toString()); 
     }finally{ 
      if (cursor != null){ 
       cursor.close(); 
      } 
      if (db != null){ 
       db.close(); 
      } 
     } 
     return 0; 
    } 

, теперь проблема функция getNumberOfNewNews. он всегда возвращает 1, когда он должен возвращать 0.

+0

здесь я привожу пример 4 типа базы данных для хранения в том, что я даю SQLite для хранения пример. вы можете проверить шляпу один https://github.com/nilkashid/AndroidDataBaseExample – nilkash

+0

Твой не помог мне. Прости. –

ответ

3

Напишите заявление о обновлении базы данных сразу после того, как вы запросили счет новостей. Ваше обновление должно изменить поле KEY_NEW_ADDED на 0. Я поставил комментарий внутри вашего метода, где вы должны написать запрос на обновление.

public int getNumberOfNewNews(String categoryName) { 
     SQLiteDatabase db = null; 
     Cursor cursor = null; 
     try{ 
      db = this.getReadableDatabase(); 

      cursor = db.query(TABLE_NEWS, new String[] { KEY_ID, 
       KEY_NEWS_ID, KEY_NAME, KEY_CATEGORY, KEY_Package_Id, 
       KEY_FAVORITE, KEY_DATE, KEY_NEW_ADDED }, KEY_CATEGORY + "=?", 
       new String[] { categoryName }, null, null, null, null); 

      if (cursor != null) 
       cursor.moveToFirst(); 

//Write the update method here 


      Log.d(categoryName + " has ", cursor.getCount() + " new News"); 
      return cursor.getCount(); 
     }catch (Exception ex){ 
      Log.d("getNumberOfNewNews: ", ex.toString()); 
     }finally{ 
      if (cursor != null){ 
       cursor.close(); 
      } 
      if (db != null){ 
       db.close(); 
      } 
     } 
     return 0; 
    } 
+0

Спасибо, это мне очень помогло! –

+1

Рад узнать, что это помогло :) –

0

Арафат прав плюс и есть для запроса базы данных с двумя аргументами выбора ... например

public int getNumberOfNewNews(String categoryName) { 
     SQLiteDatabase db = null; 
     Cursor cursor = null; 
     try{ 
      db = this.getReadableDatabase(); 

      cursor = db.query(TABLE_NEWS, new String[] { KEY_ID, 
       KEY_NEWS_ID, KEY_NAME, KEY_CATEGORY, KEY_Package_Id, 
       KEY_FAVORITE, KEY_DATE, KEY_NEW_ADDED }, KEY_CATEGORY + "=? AND ", 
       KEY_NEW_ADDED + "=? ",new String[] { categoryName, "1" }, null, null, null, null); 

      if (cursor != null) 
       cursor.moveToFirst(); 

//Write the update method here 


      Log.d(categoryName + " has ", cursor.getCount() + " new News"); 
      return cursor.getCount(); 
     }catch (Exception ex){ 
      Log.d("getNumberOfNewNews: ", ex.toString()); 
     }finally{ 
      if (cursor != null){ 
       cursor.close(); 
      } 
      if (db != null){ 
       db.close(); 
      } 
     }