android中滑动SQLite数据库分页加载

  1. package com.example.testscrollsqlite;  
  2.   
  3.   
  4. import java.util.ArrayList;  
  5.   
  6. import android.app.ActionBar.LayoutParams;  
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.view.Gravity;  
  10. import android.view.Menu;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.AbsListView;  
  14. import android.widget.AbsListView.OnScrollListener;  
  15. import android.widget.Adapter;  
  16. import android.widget.BaseAdapter;  
  17. import android.widget.LinearLayout;  
  18. import android.widget.ListView;  
  19. import android.widget.TextView;  
  20.   
  21. public class MainActivity extends Activity implements OnScrollListener{  
  22.     private TextView loadInfo;  
  23.     private ListView listView;  
  24.     private LinearLayout loadLayout;  
  25.     private ArrayList<String> items;  
  26.     private DatabaseService service;  
  27.     private int currentPage = 1//默认在第一页  
  28.     private static final int lineSize = 7;    //每次显示数   
  29.     private int allRecorders = 0;  //全部记录数  
  30.     private int pageSize = 1;  //默认共一页  
  31.     private int lastItem;  
  32.     private Aleph0 baseAdapter;  
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.activity_main);  
  37.         listView = (ListView) findViewById(R.id.listview);  
  38.         //创建一个角标线性布局用来显示"正在加载"  
  39.         loadLayout = new LinearLayout(this);  
  40.         loadLayout.setGravity(Gravity.CENTER);  
  41.         //定义一个文本显示“正在加载”  
  42.         loadInfo = new TextView(this);    
  43.         loadInfo.setText("正在加载...");  
  44.         loadInfo.setGravity(Gravity.CENTER);  
  45.         //增加组件   
  46.         loadLayout.addView(loadInfo, new LayoutParams(  
  47.                 LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));  
  48.         //增加到listView底部  
  49.         listView.addFooterView(loadLayout);  
  50.         listView.setOnScrollListener(this);  
  51.           
  52.           
  53.           
  54.         showAllData();  
  55.           
  56.     }  
  57.       
  58.     /** 
  59.      * 读取全部数据 
  60.      */  
  61.     public void showAllData(){  
  62.         service = new DatabaseService(this);  
  63.         allRecorders = service.getCount();  
  64.         //计算总页数  
  65.         pageSize = (allRecorders + lineSize -1) / lineSize;    
  66.         System.out.println("allRecorders =  " + allRecorders);  
  67.         System.out.println("pageSize  =  " + pageSize);  
  68.         items = service.getAllItems(currentPage, lineSize);  
  69.         for(int i=0; i<items.size(); i++){  
  70.             System.out.println(items.get(i));  
  71.         }  
  72.         baseAdapter = new Aleph0();  
  73.         listView.setAdapter(baseAdapter);  
  74.     }  
  75.   
  76.     @Override  
  77.     public void onScroll(AbsListView view, int firstVisible, int visibleCount,  
  78.             int totalCount) {  
  79.         lastItem = firstVisible + visibleCount - 1//统计是否到最后  
  80.           
  81.     }  
  82.   
  83.     @Override  
  84.     public void onScrollStateChanged(AbsListView view, int scorllState) {  
  85.         System.out.println("进入滚动界面了");  
  86.         //是否到最底部并且数据没读完  
  87.         if(lastItem == baseAdapter.getCount()   
  88.                 && currentPage < pageSize    //不再滚动  
  89.                 && scorllState == OnScrollListener.SCROLL_STATE_IDLE){  
  90.             currentPage ++;  
  91.             //设置显示位置  
  92.             listView.setSelection(lastItem);  
  93.             //增加数据  
  94.             appendDate();     
  95.         }  
  96.           
  97.     }  
  98.       
  99.     /** 
  100.      * 增加数据 
  101.      */  
  102.     private void appendDate(){  
  103.         ArrayList<String> additems = service.getAllItems(currentPage, lineSize);  
  104.         baseAdapter.setCount(baseAdapter.getCount() + additems.size());  
  105.         //判断,如果到了最末尾则去掉“正在加载”  
  106.         if(allRecorders == baseAdapter.getCount()){  
  107.             listView.removeFooterView(loadLayout);  
  108.         }  
  109.         items.addAll(additems);  
  110.         //通知记录改变  
  111.         baseAdapter.notifyDataSetChanged();  
  112.     }  
  113.       
  114.     class Aleph0 extends BaseAdapter {  
  115.         int count = lineSize; /* starting amount */  
  116.   
  117.         public int getCount() {  
  118.             return count;  
  119.         }   
  120.           
  121.         public void setCount(int count){  
  122.             this.count = count;  
  123.         }  
  124.   
  125.         public Object getItem(int pos) {  
  126.             return pos;  
  127.         }  
  128.   
  129.         public long getItemId(int pos) {  
  130.             return pos;  
  131.         }  
  132.   
  133.         public View getView(int pos, View v, ViewGroup p) {  
  134.             TextView view = new TextView(MainActivity.this);  
  135.             view.setTextSize(60);  
  136.             if(items != null){  
  137.                 view.setText(items.get(pos));  
  138.             }else{  
  139.                 view.setText(pos);  
  140.             }  
  141.             return view;  
  142.         }  
  143.     }  
  144.       
  145.       
  146.   
  147. }  


 

MyDBOpenHelper

[java]  view plain  copy
 print ?
  1. package com.example.testscrollsqlite;  
  2.   
  3. import android.content.ContentValues;  
  4. import android.content.Context;  
  5. import android.database.sqlite.SQLiteDatabase;  
  6. import android.database.sqlite.SQLiteOpenHelper;  
  7. import android.provider.BaseColumns;  
  8.   
  9. public class MyDBOpenHelper extends SQLiteOpenHelper {  
  10.     private static final String DATABASE_NAME = "merit.db";  
  11.     private static final int DATABASE_VERSION = 1;  
  12.     private static final String TABLE_NAME = "database";  
  13.     public static final String FIELD_TITLE = "title";  
  14.   
  15.     /** 
  16.      *  
  17.      * @param context 
  18.      *            上下文 
  19.      * @param name 
  20.      *            数据库的名字 
  21.      * @param factory 
  22.      *            结果集游标工厂(一般使用默认) 
  23.      * @param version 
  24.      *            数据库的版本号(必须version>=1) 
  25.      */  
  26.     public MyDBOpenHelper(Context context) {  
  27.         super(context, DATABASE_NAME, null, DATABASE_VERSION);  
  28.     }  
  29.   
  30.     /** 
  31.      * 在MyDBOpenHelper第一次new出来时,系统会调用onCreate方法 
  32.      */  
  33.     @Override  
  34.     public void onCreate(SQLiteDatabase db) {  
  35.         System.out.println("我被调用了");  
  36.   
  37.         String sql = "Create table " + TABLE_NAME + "(" + BaseColumns._ID  
  38.                 + " integer primary key autoincrement," + FIELD_TITLE  
  39.                 + " text )";  
  40.         db.execSQL(sql);  
  41.         initDatabase(db);  
  42.           
  43.     }  
  44.   
  45.     // 向数据库的表中插入一些数据。  
  46.     private void initDatabase(SQLiteDatabase db) {  
  47.         ContentValues cv = new ContentValues();  
  48.         cv.put("title""cctv1 news");  
  49.         db.insert(TABLE_NAME, null, cv);  
  50.   
  51.         cv.clear();  
  52.         cv.put("title""cctv2 news");  
  53.         db.insert(TABLE_NAME, null, cv);  
  54.   
  55.         cv.clear();  
  56.         cv.put("title""cctv3 news");  
  57.         db.insert(TABLE_NAME, null, cv);  
  58.   
  59.         cv.clear();  
  60.         cv.put("title""cctv4 news");  
  61.         db.insert(TABLE_NAME, null, cv);  
  62.   
  63.         cv.clear();  
  64.         cv.put("title""cctv5 news");  
  65.         db.insert(TABLE_NAME, null, cv);  
  66.   
  67.         cv.clear();  
  68.         cv.put("title""cctv6 news");  
  69.         db.insert(TABLE_NAME, null, cv);  
  70.   
  71.         cv.clear();  
  72.         cv.put("title""cctv7 news");  
  73.         db.insert(TABLE_NAME, null, cv);  
  74.   
  75.         cv.clear();  
  76.         cv.put("title""cctv8 news");  
  77.         db.insert(TABLE_NAME, null, cv);  
  78.   
  79.         cv.clear();  
  80.         cv.put("title""cctv9 news");  
  81.         db.insert(TABLE_NAME, null, cv);  
  82.   
  83.         cv.clear();  
  84.         cv.put("title""cctv10 news");  
  85.         db.insert(TABLE_NAME, null, cv);  
  86.   
  87.         cv.clear();  
  88.         cv.put("news_title""guangshui tv");  
  89.         db.insert(TABLE_NAME, null, cv);  
  90.     }  
  91.   
  92.     @Override  
  93.     public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {  
  94.         // TODO Auto-generated method stub  
  95.   
  96.     }  
  97.   
  98. }  


 

DatabaseService

[java]  view plain  copy
 print ?
  1. package com.example.testscrollsqlite;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.content.Context;  
  6. import android.database.Cursor;  
  7. import android.database.sqlite.SQLiteDatabase;  
  8.   
  9. public class DatabaseService {   
  10.   
  11.     private Context mContext;  
  12.     private MyDBOpenHelper dbHelper;  
  13.       
  14.   
  15.     public DatabaseService(Context context) {  
  16.         // TODO Auto-generated constructor stub  
  17.         mContext = context;  
  18.         dbHelper = new MyDBOpenHelper(mContext);  
  19.     }  
  20.   
  21.     // 添加  
  22.     public void insert(String title) {  
  23.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  24.         String sql = "insert into database(title) values(?)";  
  25.         db.execSQL(sql, new String[] { title });  
  26.     }  
  27.   
  28.     // 删除  
  29.     public void delete(String title) {  
  30.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  31.         String sql = "delete from database where title = ?";  
  32.         db.execSQL(sql, new String[] { title });  
  33.     }  
  34.   
  35.     // 查找  
  36.     public ArrayList<String> find(int id) {  
  37.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  38.         String sql = "select * from database where _id = ? ";  
  39.         Cursor c = db.rawQuery(sql, new String[] { String.valueOf(id) });  
  40.         ArrayList<String> titles = new ArrayList<String>();  
  41.         if (c.moveToNext()) {  
  42.             String title = c.getString(c  
  43.                     .getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));  
  44.             titles.add(title);  
  45.             return titles;  
  46.         }  
  47.         // 不用忘记关闭Cursor。  
  48.         c.close();  
  49.         return null;  
  50.     }  
  51.   
  52.     // 更新  
  53.     public void upDate(int id, String title) {  
  54.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  55.         String sql = "update database set title =? where _id = ?";  
  56.         db.execSQL(sql,  
  57.                 new String[] { String.valueOf(title), String.valueOf(id) });  
  58.     }  
  59.   
  60.     // 查询记录的总数  
  61.     public int getCount() {  
  62.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  63.         String sql = "select count(*) from database";  
  64.         Cursor c = db.rawQuery(sql, null);  
  65.         c.moveToFirst();  
  66.         int length = c.getInt(0);  
  67.         c.close();  
  68.         return length;  
  69.     }  
  70.   
  71.     /** 
  72.      * 分页查询 
  73.      *  
  74.      * @param currentPage 当前页 
  75.      * @param pageSize 每页显示的记录 
  76.      * @return 当前页的记录 
  77.      */  
  78.     public ArrayList<String> getAllItems(int currentPage, int pageSize) {  
  79.         int firstResult = (currentPage - 1) * pageSize;  
  80.         int maxResult = currentPage * pageSize;  
  81.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  82.         String sql = "select * from database limit ?,?";  
  83.         Cursor mCursor = db.rawQuery(  
  84.                 sql,  
  85.                 new String[] { String.valueOf(firstResult),  
  86.                         String.valueOf(maxResult) });  
  87.         ArrayList<String> items = new ArrayList<String>();  
  88.         int columnCount  = mCursor.getColumnCount();  
  89.         while (mCursor.moveToNext()) {  
  90.             String item = mCursor.getString(mCursor  
  91.                     .getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));  
  92.             items.add(item);  
  93.               
  94.         }  
  95.         //不要关闭数据库  
  96.         return items;  
  97.     }  
  98. }  

 

activity_main.xml

[html]  view plain  copy
 print ?
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent"  
  4.       
  5.     android:orientation="vertical" >  
  6.     <ListView   
  7.         android:layout_width="match_parent"  
  8.         android:layout_height="wrap_content"  
  9.         android:id="@+id/listview">  
  10.           
  11.     </ListView>  
  12.   
  13. </LinearLayout>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio,可以使用SQLiteOpenHelper类来扩展SQLite数据库。该类提供了一些方法来创建和升级数据库。以下是一个简单的示例: 1. 首先,创建一个继承自SQLiteOpenHelper的类: ``` public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; private static final int DATABASE_VERSION = 1; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建表格等操作 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 升级数据库操作 } } ``` 2. 在该类实现onCreate()方法和onUpgrade()方法。在onCreate()方法,可以创建表格和初始化数据等操作。在onUpgrade()方法,可以升级数据库结构和数据等操作。 3. 在需要使用数据库的Activity或Fragment,创建MyDatabaseHelper对象,并调用getWritableDatabase()或getReadableDatabase()方法来获取可读可写的数据库实例。 ``` MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); ``` 4. 使用SQLiteDatabase对象进行操作,例如插入、查询、更新、删除等操作。 ``` // 插入数据 ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("age", 18); db.insert("user", null, values); // 查询数据 Cursor cursor = db.query("user", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); Log.d(TAG, "name: " + name + ", age: " + age); } while (cursor.moveToNext()); } cursor.close(); ``` 这样,就可以在Android Studio扩展SQLite数据库了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值