SqliteDatabase之分页加载

代码:


package com.qianfeng.sqlitedivpage;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	private ListView lv;
	private RelativeLayout rl1;
	private SQLiteDatabase db ;
	private List<Map<String, Object>> list;
	
	private int totalNum;//总的数据条数
	private int pageSize =10 ;//每页显示的数据
	private int totalPage ;//总的页数
	private int currentPage = 1;//当前页数
	
	private boolean isBottom =false;
	
	SimpleAdapter adapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) findViewById(R.id.lv);
		rl1 = (RelativeLayout) findViewById(R.id.rl1);
		
		String path = Environment.getExternalStorageDirectory().getAbsolutePath()
				+File.separator+"Download"+File.separator+"info.db";
		db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
		
		Cursor cursor = db.rawQuery("Select * from person", null);
		totalNum = cursor.getCount();//得到数据的总条数
		totalPage =(int) Math.ceil(totalNum/(float)pageSize);//通过计算得到总的页数
		if(1== currentPage){
			list = getData(currentPage);
		}
		
		 adapter = new SimpleAdapter(
				MainActivity.this, 
				list, 
				R.layout.item, 
				new String[]{"_id","name"}, 
				new int[]{R.id.textView1,R.id.textView2});
		
		lv.setAdapter(adapter);
		
		lv.setOnScrollListener(new OnScrollListener() {
			
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				// TODO Auto-generated method stub
				if(isBottom&&(OnScrollListener.SCROLL_STATE_IDLE ==scrollState)){
					if(currentPage<totalPage){
						rl1.setVisibility(View.VISIBLE);
					}else{
						rl1.setVisibility(View.GONE);
					}
				}
			}
			
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				// TODO Auto-generated method stub
				isBottom =((firstVisibleItem+visibleItemCount)==totalItemCount);
			}
		});
		
	}

	public void click(View v){
		switch (v.getId()) {
		case R.id.rl1:
			//当前页 是否小与总的页数 
			if(currentPage<totalPage){
				currentPage++;
				list.addAll(getData(currentPage));
				adapter.notifyDataSetChanged();
			}
			rl1.setVisibility(View.GONE);
			break;

		default:
			break;
		}
	}
	/**
	 * 获取当前页的database数据
	 * @param currentPage
	 * @return
	 */
	public List<Map<String, Object>> getData(int currentPage){
		int index = (currentPage-1)*pageSize;//当前页   起始的下标  (2-1)*10
		String sql = "Select * from person limit ?,?";
		Cursor cursor = db.rawQuery(sql, new String []{(index)+"",pageSize+""});
		return getCursorTolist(cursor);
	}
	
	/**
	 * 根据Cursor对象转换成list集合
	 * @return
	 */
	public List<Map<String, Object>> getCursorTolist(Cursor c){
		List<Map<String, Object>>  list = new ArrayList<Map<String,Object>>();
		String []coloms = c.getColumnNames();//[_id,name]
		//c.moveToFirst();
		while(c.moveToNext()){
			Map<String, Object> map = new HashMap<String, Object>();
			for(int i=0;i<coloms.length;i++){
				String key = coloms[i];
				Object value=null;
				int type = c.getType(i);//得到数据的类型
				switch (type) {
				case Cursor.FIELD_TYPE_BLOB:
					value =c.getBlob(i);//根据下标i得到values
					break;
				case Cursor.FIELD_TYPE_FLOAT:
					value= c.getFloat(i);
					break;
				case Cursor.FIELD_TYPE_INTEGER:
					value= c.getInt(i);
					break;
				case Cursor.FIELD_TYPE_STRING:
					value= c.getString(i);
					break;

				default:
					break;
				}
				map.put(key, value);
			}
			list.add(map);
		}
		
		return list; 
	}

}















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值