2016-03-21 3 views
-1

Я пытаюсь получить общее количество записей в таблице базы данных Sqlite, когда в конце прокрутки списка List. Но основная проблема заключается в том, что первый раз подсчет считается точным. Когда я снова прокрутка в конце счета - это увеличение. Предположим, у меня есть 181 общее количество записей, и снова прокрутите в конце, чтобы получить счет 362, снова прокрутите 543, ... 724, ... 905 и т. Д. Почему бы не получить постоянную ценность, например, 181. Если кто-то поможет мне реши это?Как получить количество строк SQLite в Android

Вот мой код для получения общего количества записей в постоянном классе

public final class Constant 
{ 
    public static SQLiteDatabase db; 
    public static MyDbHelper dbhelper; 

    public static int GetLocalPages(Context context) 
    { 
     dbhelper = new MyDbHelper(context); 
     dbhelper.onOpen(db); 

     String query = "select count(*) from ALL_Post"; 
     db = dbhelper.getWritableDatabase(); 
     Cursor c = db.rawQuery(query, null); 
     if (c.moveToFirst()) 
     { 
      totalRowCount += c.getInt(0); 
      Log.e("11111 ", " totalRowCount = " + totalRowCount); 
     } 
     if(totalRowCount < 50) 
     { 
      num= 1 ; 
      Log.e("22222 "," num= " + num); 
     } 
     if(totalRowCount > 50) 
     { 
      num= totalRowCount/50; 
      Log.e("33333 ", " num= " + num); 
     } 
     if(totalRowCount % 50> 0) 
     { 
      num += 1; 
      Log.e("44444 ", " num = " + num); 
     } 
     return num ; 
    } 

} 

А вот мой ListView scrollListener Метод

listView.setOnScrollListener(new AbsListView.OnScrollListener() 
     { 
      @Override 
      public void onScrollStateChanged(AbsListView view, int scrollState) {} 

      @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, 
           int visibleItemCount, int totalItemCount) 
      { 

       lastInScreen = firstVisibleItem + visibleItemCount; 
       //Log.e("","lastInScreen="+lastInScreen); 
       if(lastInScreen == totalItemCount) 
       { 
        Toast.makeText(getApplicationContext(), "Your Last Item." + lastInScreen , Toast.LENGTH_SHORT).show(); 
int values= Constant.GetLocalPages(getApplicationContext()); 
        Log.e("", "values=" + values); 

        } 
      } 
     }); 

ответ

1

Назначить totalRowCount = 0; Перед вызовом вашего метода БД ...

И почему вы хотите его на каждом свитке? Это количество вашей БД ... и не будет меняться при прокрутке. Вам просто нужно получить его один раз.

+0

Но как. Можете ли вы дать мне фрагмент кода. – jandroid

+0

Ваш запрос верен. просто напишите totalRowCount = c.getInt (0); вместо totalRowCount + = c.getInt (0); Вы получите постоянное значение строк –

1

Не знаю, как totalRowCount определяются. Но это похоже на переменную класса, определенную и постоянно увеличивающуюся при каждом вызове GetLocalPages(Context). Это объясняет поведение.

+0

@jandroid: как @Yangfan сказал, вы должны проверить свой логический, когда получите 'totalRowCount'. –

1

Вы можете попробовать это,

просто изменить в коде ..

public final class Constant 
{ 
    public static SQLiteDatabase db; 
    public static MyDbHelper dbhelper; 

    public static int GetLocalPages(Context context) 
    { 
     dbhelper = new MyDbHelper(context); 
     dbhelper.onOpen(db); 
     int num =0;    

     String query = "select count(*) from ALL_Post"; 
     db = dbhelper.getWritableDatabase(); 
     Cursor c = db.rawQuery(query, null); 
     num =c.getCount(); 
     return num ; 
    } 

} 

и некоторые Chenge в слушателем тоже ..

listView.setOnScrollListener(new AbsListView.OnScrollListener() 
     { 
      @Override 
      public void onScrollStateChanged(AbsListView view, int scrollState) {} 

      @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, 
           int visibleItemCount, int totalItemCount) 
      { 

       lastInScreen = firstVisibleItem + visibleItemCount; 
       //Log.e("","lastInScreen="+lastInScreen); 
       if(lastInScreen == totalItemCount) 
       { 
        Toast.makeText(getApplicationContext(), "Your Last Item." + lastInScreen , Toast.LENGTH_SHORT).show(); 
      int values = 0; 
      values= Constant.GetLocalPages(getApplicationContext()); 
        Log.e("", "values=" + values); 

        } 
      } 
     }); 

Я надеюсь, что это поможет.

+0

Спасибо за ответ, но по-прежнему получаю такую ​​же проблему. – jandroid

+0

повторите проверку с моим кодом обновления. – rockstar

+0

можете делиться кодом деятельности, пожалуйста. – rockstar

Смежные вопросы