把数据库内容显示在listview上
数据库操作很简单,但用户想看见的是数据库里的内容,那么让数据库内容显示在屏幕上呢,下面做个简单演示,百变不离其中,先看步骤:
把数据库的数据显示至屏幕
1. 任意插入一些数据
定义Javabean:Person.java来封装name, phone, money 并设置get ,set , tostring方法
然后 读取数据库的所有数据:
- Cursor cs = db.query("person", null, null, null, null, null, null);
- while(cs.moveToNext()){
- String name = cs.getString(cs.getColumnIndex("name"));
- String phone = cs.getString(cs.getColumnIndex("phone"));
- String money = cs.getString(cs.getColumnIndex("money"));
- //把读到的数据封装至Person对象
- Person p = new Person(name, phone, money);
- //把person对象保存至集合中
- people.add(p);
- }
把集合中的数据显示至屏幕:
分页查询
- Cursor cs = db.query("person", null, null, null, null, null, null, "0, 10"); //查询表0-10的条目,"10,10":从第10个条目开始向后查询10个
ListView
用于显示列表
MVC结构思想:
M:model模型层,要显示的数据 ————people集合
V:view视图层,用户看到的界面 ————ListView
C:control控制层,操作数据如何显示 ————adapter对象
BaseAdapter
封装度地 自由度高可以定制很多不同样式的listview
必须实现的两个方法
第一个 getcount
- //系统调用此方法,用来获知模型层有多少条数据
- @Override
- public int getCount() {
- return people.size();
- }
第二个getview
- //系统调用此方法,获取要显示至ListView的View对象
- //position:是return的View对象所对应的数据在集合中的位置
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- System.out.println("getView方法调用" + position);
- TextView tv = new TextView(MainActivity.this);
- //拿到集合中的元素
- Person p = people.get(position);
- tv.setText(p.toString());
- //把TextView的对象返回出去,它会变成ListView的条目
- return tv;
- }
屏幕上能显示多少个条目,getView方法就会被调用多少次,屏幕向下滑动时,getView会继续被调用,创建更多的View对象显示至屏幕
条目的缓存
- convertView =
当条目划出屏幕时,系统会把该条目缓存至内存,当该条目再次进入屏幕,系统在重新调用getView时会把缓存的条目作为convertView参数传入,但是传入的条目不一定是之前被缓存的该条目,即系统有可能在调用getView方法获取第一个条目时,传入任意一个条目的缓存
ViewHolder缓存
class ViewHolder 封装View里的空间 用viewholder.XXXX来取出
思路写出来了 同学们自己试一下
MainActivity
- package com.ace.sqlite;
- import java.util.ArrayList;
- import java.util.List;
- import android.os.Bundle;
- import android.app.Activity;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.view.LayoutInflater;
- import android.view.Menu;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.ListAdapter;
- import android.widget.ListView;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- List<Person> personList;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- personList = new ArrayList<Person>();
- //查询数据库
- MyOpenHelper oh = new MyOpenHelper(this);
- SQLiteDatabase db = oh.getWritableDatabase();
- Cursor cursor = db.query("person", null, null, null, null, null, null, null);
- while(cursor.moveToNext()){
- String name = cursor.getString(1);
- String phone = cursor.getString(2);
- int salary = cursor.getInt(3);
- Person p = new Person(name, phone, salary);
- personList.add(p);
- }
- //找到listview
- ListView lv = (ListView) findViewById(R.id.lv);
- //设置显示内容
- lv.setAdapter(new MyAdapter());
- }
- class MyAdapter extends BaseAdapter{
- //系统调用,用来获知模型层有多少条数据
- @Override
- public int getCount() {
- return personList.size();
- }
- //系统调用,返回的View对象就会作为ListView的一个条目显示在屏幕上
- //position:该次getView调用返回的View对象在ListView中是第几个条目,position的值就是几
- //convertView:系统之前缓存的条目
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- System.out.println("getView方法调用" + position + ":" + convertView);
- Person p = personList.get(position);
- // TextView tv = new TextView(MainActivity.this);
- // tv.setText(p.toString());
- // tv.setTextSize(16);
- //获取布局填充器
- // LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
- // LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
- // View view = inflater.inflate(R.layout.item_listview, null);
- View view = null;
- if(convertView == null){
- //把布局文件填充成view对象
- view = View.inflate(MainActivity.this, R.layout.item_listview, null);
- }
- else{
- view = convertView;
- }
- //必须使用view.findViewById
- TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
- tv_name.setText(p.getName());
- TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);
- tv_phone.setText(p.getPhone());
- TextView tv_salary = (TextView) view.findViewById(R.id.tv_salary);
- tv_salary.setText(p.getSalary() + "");
- return view;
- }
- @Override
- public Object getItem(int position) {
- return null;
- }
- @Override
- public long getItemId(int position) {
- return 0;
- }
- }
- }
MyOpenHelper
- package com.ace.sqlite;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteDatabase.CursorFactory;
- import android.database.sqlite.SQLiteOpenHelper;
- public class MyOpenHelper extends SQLiteOpenHelper {
- public MyOpenHelper(Context context) {
- //arg1:数据库文件名字
- //arg2:游标工厂,游标等同于结果集,传null使用默认工厂
- //arg3:版本,不能小于1,用于升级
- super(context, "people.db", null, 1);
- }
- //创建数据库时调用
- @Override
- public void onCreate(SQLiteDatabase db) {
- //创建表
- db.execSQL("create table person(_id integer primary key autoincrement, name char(10), phone char(20), salary integer(10))");
- }
- //升级数据库时调用
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- System.out.println("数据库升级");
- }
- }
Person:
- public class Person {
- private String name;
- private String phone;
- private int salary;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPhone() {
- return phone;
- }
- public void setPhone(String phone) {
- this.phone = phone;
- }
- public int getSalary() {
- return salary;
- }
- public void setSalary(int salary) {
- this.salary = salary;
- }
- @Override
- public String toString() {
- return "name=" + name + ", phone=" + phone + ", salary="
- + salary;
- }
- public Person(String name, String phone, int salary) {
- super();
- this.name = name;
- this.phone = phone;
- this.salary = salary;
- }
- }
Test:
- public class Test extends AndroidTestCase{
- public void test(){
- // 获取虚拟上下文
- MyOpenHelper oh = new MyOpenHelper(getContext());
- //如果数据库不存在,先创建,再打开,如果存在,就直接打开
- SQLiteDatabase db = oh.getWritableDatabase();
- //创建50条数据
- ContentValues values = new ContentValues();
- for (int i = 0; i < 50; i++) {
- values.clear();
- values.put("name", "张" + i);
- values.put("phone", "135" +i+i);
- values.put("salary", "2000" + i);
- db.insert("person", null, values);
- }
- }
- }
list_item:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <TextView
- android:id="@+id/tv_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="name"
- android:textSize="25sp"
- />
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_alignParentRight="true"
- >
- <TextView
- android:id="@+id/tv_phone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="phone"
- />
- <TextView
- android:id="@+id/tv_salary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="salary"
- />
- </LinearLayout>
- </RelativeLayout>
activity.xml:
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity"
- android:orientation="vertical"
- >
- <ListView
- android:id="@+id/lv"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- ></ListView>
- </LinearLayout>
把数据库内容显示在listview上的更多相关文章
- 从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上
http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 这是一个接口,通过这个接口来获取数据并解析 大体上就是把解析的数据还有图片u ...
- 接收键盘输入的字符串,用FileWirter类将字符串写入文件,用FileReader类读出文件内容显示在屏幕上
public class SY63 { public static void main(String[] args) throws Exception { System.out.print(" ...
- java servlet上传文件并把文件内容显示在网页中
servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...
- 商务系统的构造思路(无源码!)+如何用jsp实现点击单选框内容显示在另一个jsp页面
敲码经验总结: 之前犯了一个错误就是,没有从底层开始学起,有啥问题,就直接博客园找源码,去CSDN找源代码,看到代码就复制粘贴,结果从新梳理知识点的时候,貌似除了复制粘贴,印象深刻的知识啥也没学到. ...
- 用ListView实现对数据库的内容显示
用ListView实现对数据库的内容显示 创建一个触发机制 ---------(作用)将数据读入ArrayList集合中 MyBase base = new MyBase(); SQLiteDatab ...
- jsp+oracle实现数据库内容以表格形式在前台显示(包含分页)
jsp+oracle实现数据库内容以表格形式在前台显示(包含分页) 在文件夹内新增list_emp.jsp 代码如下: <%@ page contentType="text/html& ...
- PHP——分页显示数据库内容
test.php <?php header("Content-Type:text/html;charset=utf-8"); //加载分页类 include "pa ...
- 判断数据库内容,在页面显示自定义数据case when
判断数据库内容,在页面显示自定义数据 case when...then ...else...end 比如:数据库内容是这样: 通过sql语句判断,数据库的name字段,内容是月桂的,显示嫦娥,其他的显 ...
- Android数据库信息显示在listview上
Key Points: 1.使用SimpleCursorAdapter将Android数据库信息显示在listview上 adapter = new SimpleCursorAdapter(this, ...
随机推荐
- JAVA自动装箱拆箱与常量池
java 自动装箱与拆箱 这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的 ...
- C# 可变参数
class Program { static void Main(string[] args) { //常规使用方法 Console.WriteLine(Add(, , , , , , , , })) ...
- windows phone 8 新增功能:从一个应用程序启动另一个程序(file association 和 Protocol association两种方式)
一. 启动手机预装内置程序打开文件file association 这里以打开word文档为例子 string fileToLaunch = @"HelloKitty.docx"; ...
- angular学习文章
https://www.jianshu.com/p/86c6249a2069 angular.cn https://segmentfault.com/a/1190000008754631
- NSSize 尺寸
前言 结构体,这个结构体用来表示事物的宽度和高度. typedef CGSize NSSize; struct CGSize { CGFloat width; CGFloat height; }; t ...
- python3好用的mysql.connector库
python3好用的mysql.connector库 from mysql.connector import connect #建立mysql连接,生成一个mysql.connector对象 conn ...
- 【bzoj3930】选数 容斥原理+暴力
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- JDBC_事务概念_ACID特点_隔离级别_提交commit_回滚rollback
事务的概念 一组要么同时执行成功,要么同时执行失败的SQL语句,是数据库操作的一个执行单元! 事务开始于: 连接到数据库上,并执行一条DML语句(insert,update或delete),前一个事务 ...
- STM32F0 中 ADC 多通道转换结果相同的问题
前言 前段时间调试 STM32F030 的 ADC,在多通道转换时遇到了奇怪的问题,使用官方的例程和库函数连续转换多个 ADC 通道,得到的几个通道的结果是一样的,解决办法参考了 关于STM32F0系 ...
- Android Toast语句应用
1.findViewById()函数使用 函数作用:通过id来找到前台界面的组件 2.Toast语句 (1)介绍 (2)用法 (3)代码示例 package com.lucky.test21; imp ...