sqlite数据库数据的分页

sqlite数据库数据的分页

 

效果图示例

202601_L7be_2542711.png202619_hDvj_2542711.png

202638_vCM0_2542711.png

202704_6l2D_2542711.png

 

 

1、在清单里添加对数据库操作的权限

代码

 

  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

=================================

 

2、有2个布局 一个activity_main.xml 一个item_activity.xml

1)activity_main.xml布局文件

 

代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listView_main_titlelist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true">
    </ListView>
<!-- 进度加载控件 -->
    <LinearLayout
        android:id="@+id/layout_more"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:textColor="#000"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:onClick="clickButton"
        android:visibility="invisible"
        android:gravity="center">
        <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"/>

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击加载更多数据..."
            android:textSize="30sp"/>

    </LinearLayout>

</RelativeLayout>

 

-----------------------------------

item_activity.xml布局文件

 

代码

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/text_item_listview_id"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="TextView"
        android:textColor="#f00"
        android:textSize="40sp" />

    <TextView
        android:id="@+id/text_item_listview_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_weight="3"
        android:text="TextView"
        android:textColor="#00f"
        android:textSize="40sp" />

    <TextView
        android:id="@+id/text_item_listview_score"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_weight="3"
        android:text="TextView"
        android:textColor="#00f"
        android:textSize="40sp" />

</LinearLayout>

 

--------------------------------

3、有2个类 一个工具类 用来对数据库的增删改查操作一个MainActivity类

 

工具类

 

代码

 

public class Sqlite_operate_utils {

 private static String DB_PATH = Environment.getExternalStorageDirectory() + File.separator + "stuentinfo.db";
 private SQLiteDatabase db;
 
 //构造函数 new 该类的时候 就去找 需要找的 数据库
 public Sqlite_operate_utils() {
  db = SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READWRITE);
 }
 
 //查询 数据的 方法1
 public Cursor sqlite_select(String content, String[] condition){
  return db.rawQuery(content, condition);
 }
 
 //查询 数据 的 方法2
 public List<Map<String, String>> sqlite_selectlist(String content, String[] condition){
  Log.i("data", "cursor:");
  Cursor cursor = db.rawQuery(content, condition);
  return cursorToList(cursor);
 }
 //返回List
 public List<Map<String, String>> cursorToList(Cursor cursor) {
  List<Map<String, String>> list = new ArrayList<Map<String,String>>();
  while(cursor.moveToNext()){//数据库表的 行
   Map<String, String> map = new HashMap<String, String>();
   for(int i = 0;i<cursor.getColumnCount();i++){//数据库表的列
    map.put(cursor.getColumnName(i), cursor.getString(i));
   }
   list.add(map);
  }
  cursor.close();
  Log.i("data", "list:" + list.size());
  return list;
 }
 
 //增删改 的方法
 //返回布尔型 方便 查看 数据 操作 是否成功
 public boolean executeData(String execute_content, Object[] bindArgs){
  try {
   if(bindArgs == null){//要绑定占位符 的参数值
    db.execSQL(execute_content);
    return true;
   }else{
    db.execSQL(execute_content, bindArgs);
    return true;
   }
  } catch (SQLException e) {
   e.printStackTrace();
   return false;
  }
 }
 
 //关闭db
 public void destroy(){
  if(db != null){
   db.close();
  }
 }
}

 

 

==========================

 

 

 

 

MianActivity类

 

代码

 

 

public class MainActivity extends Activity {

 private ListView listview;
 private LinearLayout layout_progress;
 private Sqlite_operate_utils sql;
 private SimpleAdapter adapter;
 private List<Map<String, String>> list_datainfo;

 // 分页属性 声明
 private int pageNo = 1;// 第几页
 private int pageSize = 10;// 每页有多少条数据
 private int pageCount;// 总页数
 private boolean isbottom;// 用来判断 是否是 底部

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

  this.listview = (ListView) this
    .findViewById(R.id.listView_main_titlelist);
  this.layout_progress = (LinearLayout) this
    .findViewById(R.id.layout_more);
  sql = new Sqlite_operate_utils();
  
  //计算 数据库 学生信息表的总页数
        String content = "select count(*) from studentinfo ";//一行一列 数据
  Cursor cursor = sql.sqlite_select(content, null);
  cursor.moveToFirst();//移动游标 到一地个位置
     int count = cursor.getInt(0);//总记录数
  //关闭游标
  cursor.close();
  pageCount = (int)Math.ceil(count/(double)pageSize);
  
  list_datainfo = getInfo();
  adapter = new SimpleAdapter(this, list_datainfo, R.layout.item_listview,
    new String[] { "s_sex", "s_age", "s_score" }, new int[] {
      R.id.text_item_listview_name,
      R.id.text_item_listview_id,
      R.id.text_item_listview_score });
  listview.setAdapter(adapter);
  //listview滚动 事件 监听
  listview.setOnScrollListener(new OnScrollListener() {
   @Override
   public void onScrollStateChanged(AbsListView view, int scrollState) {
    if(isbottom){
     if(pageCount == pageNo){
      Toast.makeText(MainActivity.this, "没有更多数据!!", Toast.LENGTH_SHORT).show();
     }else{
      layout_progress.setVisibility(View.VISIBLE);
     }
    }
    
   }
   @Override
   public void onScroll(AbsListView view, int firstVisibleItem,
     int visibleItemCount, int totalItemCount) {
    isbottom = ((firstVisibleItem + visibleItemCount) == totalItemCount);
   }
  });
 }

 //进度加载 的点击事件 监听
 public void clickButton(View view){
  if(pageNo<pageCount){
   pageNo++;
   list_datainfo.addAll(getInfo());
   //更新 listview 视图
   adapter.notifyDataSetChanged();
  }
  layout_progress.setVisibility(View.GONE);
 }
 private List<Map<String, String>> getInfo() {
  List<Map<String, String>> list = new ArrayList<Map<String,String>>();
  //分页
  int start = (pageNo - 1)*pageSize;
  String content = "select * from studentinfo limit ?,?";
  String[] condition = {start + "",pageSize + ""};
  list = sql.sqlite_selectlist(content, condition);
  return list;
 }
}

转载于:https://my.oschina.net/u/2542711/blog/608654

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值