2016-03-21 19 views
-1

私はリストビューのスクロールの終わりにSqliteデータベーステーブルの総レコード数を取得しようとしています。しかし、大きな問題は初めてカウントが正確です。終了カウントでのスクロールが増加します。私は181レコードの総数を持っていると仮定し、最後にスクロールカウントが362、再びスクロール543、... 724、... 905など181.Can誰かに私を助けるような定数値を取得しないでくださいそれを解決する?どのようにAndroidのSQLiteの行数を取得する

はここ

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

assign totalRowCount = 0; DBメソッドを呼び出す前に...

なぜ、すべてのスクロールでそれをしたいですか? DBの数です...スクロールでは変更されません。 一度だけ取得する必要があります。

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

あなたの質問は正しいです。 書き込み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は..私は、これはあなたを助けることを願っています。

+0

返信ありがとう、しかし、同じ問題がまだ得ています。 – jandroid

+0

私の更新コードで再確認してください。 – rockstar

+0

あなたはアクティビティコードを教えてください。 – rockstar

関連する問題