数据库操作很简单,但用户想看见的是数据库里的内容,那么让数据库内容显示在屏幕上呢,下面做个简单演示,百变不离其中,先看步骤:

把数据库的数据显示至屏幕
1. 任意插入一些数据
 定义Javabean:Person.java来封装name, phone, money 并设置get ,set , tostring方法

然后 读取数据库的所有数据:

  1. Cursor cs = db.query("person", null, null, null, null, null, null);
  2. while(cs.moveToNext()){
  3. String name = cs.getString(cs.getColumnIndex("name"));
  4. String phone = cs.getString(cs.getColumnIndex("phone"));
  5. String money = cs.getString(cs.getColumnIndex("money"));
  6. //把读到的数据封装至Person对象
  7. Person p = new Person(name, phone, money);
  8. //把person对象保存至集合中
  9. people.add(p);
  10. }

把集合中的数据显示至屏幕:

分页查询

  1. 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

  1. //系统调用此方法,用来获知模型层有多少条数据
  2. @Override
  3. public int getCount() {
  4. return people.size();
  5. }

第二个getview

  1. //系统调用此方法,获取要显示至ListView的View对象
  2. //position:是return的View对象所对应的数据在集合中的位置
  3. @Override
  4. public View getView(int position, View convertView, ViewGroup parent) {
  5. System.out.println("getView方法调用" + position);
  6. TextView tv = new TextView(MainActivity.this);
  7. //拿到集合中的元素
  8. Person p = people.get(position);
  9. tv.setText(p.toString());
  10.  
  11. //把TextView的对象返回出去,它会变成ListView的条目
  12. return tv;
  13. }

屏幕上能显示多少个条目,getView方法就会被调用多少次,屏幕向下滑动时,getView会继续被调用,创建更多的View对象显示至屏幕

条目的缓存

  1. convertView =

当条目划出屏幕时,系统会把该条目缓存至内存,当该条目再次进入屏幕,系统在重新调用getView时会把缓存的条目作为convertView参数传入,但是传入的条目不一定是之前被缓存的该条目,即系统有可能在调用getView方法获取第一个条目时,传入任意一个条目的缓存

ViewHolder缓存

class ViewHolder 封装View里的空间 用viewholder.XXXX来取出

思路写出来了 同学们自己试一下

MainActivity

  1. package com.ace.sqlite;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.os.Bundle;
  7. import android.app.Activity;
  8. import android.database.Cursor;
  9. import android.database.sqlite.SQLiteDatabase;
  10. import android.view.LayoutInflater;
  11. import android.view.Menu;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.BaseAdapter;
  15. import android.widget.EditText;
  16. import android.widget.ImageView;
  17. import android.widget.LinearLayout;
  18. import android.widget.ListAdapter;
  19. import android.widget.ListView;
  20. import android.widget.TextView;
  21.  
  22. public class MainActivity extends Activity {
  23.  
  24. List<Person> personList;
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_main);
  29.  
  30. personList = new ArrayList<Person>();
  31. //查询数据库
  32. MyOpenHelper oh = new MyOpenHelper(this);
  33. SQLiteDatabase db = oh.getWritableDatabase();
  34. Cursor cursor = db.query("person", null, null, null, null, null, null, null);
  35.  
  36. while(cursor.moveToNext()){
  37. String name = cursor.getString(1);
  38. String phone = cursor.getString(2);
  39. int salary = cursor.getInt(3);
  40.  
  41. Person p = new Person(name, phone, salary);
  42. personList.add(p);
  43. }
  44.  
  45. //找到listview
  46. ListView lv = (ListView) findViewById(R.id.lv);
  47. //设置显示内容
  48. lv.setAdapter(new MyAdapter());
  49.  
  50. }
  51.  
  52. class MyAdapter extends BaseAdapter{
  53.  
  54. //系统调用,用来获知模型层有多少条数据
  55. @Override
  56. public int getCount() {
  57. return personList.size();
  58. }
  59.  
  60. //系统调用,返回的View对象就会作为ListView的一个条目显示在屏幕上
  61. //position:该次getView调用返回的View对象在ListView中是第几个条目,position的值就是几
  62. //convertView:系统之前缓存的条目
  63. @Override
  64. public View getView(int position, View convertView, ViewGroup parent) {
  65. System.out.println("getView方法调用" + position + ":" + convertView);
  66. Person p = personList.get(position);
  67.  
  68. // TextView tv = new TextView(MainActivity.this);
  69. // tv.setText(p.toString());
  70. // tv.setTextSize(16);
  71.  
  72. //获取布局填充器
  73. // LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
  74. // LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
  75.  
  76. // View view = inflater.inflate(R.layout.item_listview, null);
  77.  
  78. View view = null;
  79. if(convertView == null){
  80. //把布局文件填充成view对象
  81. view = View.inflate(MainActivity.this, R.layout.item_listview, null);
  82.  
  83. }
  84. else{
  85. view = convertView;
  86. }
  87.  
  88. //必须使用view.findViewById
  89. TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
  90. tv_name.setText(p.getName());
  91.  
  92. TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);
  93. tv_phone.setText(p.getPhone());
  94.  
  95. TextView tv_salary = (TextView) view.findViewById(R.id.tv_salary);
  96. tv_salary.setText(p.getSalary() + "");
  97. return view;
  98. }
  99.  
  100. @Override
  101. public Object getItem(int position) {
  102. return null;
  103. }
  104.  
  105. @Override
  106. public long getItemId(int position) {
  107. return 0;
  108. }
  109.  
  110. }
  111.  
  112. }

MyOpenHelper

  1. package com.ace.sqlite;
  2.  
  3. import android.content.Context;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;
  6. import android.database.sqlite.SQLiteOpenHelper;
  7.  
  8. public class MyOpenHelper extends SQLiteOpenHelper {
  9.  
  10. public MyOpenHelper(Context context) {
  11. //arg1:数据库文件名字
  12. //arg2:游标工厂,游标等同于结果集,传null使用默认工厂
  13. //arg3:版本,不能小于1,用于升级
  14. super(context, "people.db", null, 1);
  15. }
  16.  
  17. //创建数据库时调用
  18. @Override
  19. public void onCreate(SQLiteDatabase db) {
  20. //创建表
  21. db.execSQL("create table person(_id integer primary key autoincrement, name char(10), phone char(20), salary integer(10))");
  22. }
  23.  
  24. //升级数据库时调用
  25. @Override
  26. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  27. System.out.println("数据库升级");
  28. }
  29.  
  30. }

Person:

  1. public class Person {
  2.  
  3. private String name;
  4. private String phone;
  5. private int salary;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public String getPhone() {
  13. return phone;
  14. }
  15. public void setPhone(String phone) {
  16. this.phone = phone;
  17. }
  18. public int getSalary() {
  19. return salary;
  20. }
  21. public void setSalary(int salary) {
  22. this.salary = salary;
  23. }
  24. @Override
  25. public String toString() {
  26. return "name=" + name + ", phone=" + phone + ", salary="
  27. + salary;
  28. }
  29. public Person(String name, String phone, int salary) {
  30. super();
  31. this.name = name;
  32. this.phone = phone;
  33. this.salary = salary;
  34. }
  35.  
  36. }

Test:

  1. public class Test extends AndroidTestCase{
  2.  
  3. public void test(){
  4. // 获取虚拟上下文
  5. MyOpenHelper oh = new MyOpenHelper(getContext());
  6. //如果数据库不存在,先创建,再打开,如果存在,就直接打开
  7. SQLiteDatabase db = oh.getWritableDatabase();
  8.  
  9. //创建50条数据
  10. ContentValues values = new ContentValues();
  11. for (int i = 0; i < 50; i++) {
  12. values.clear();
  13. values.put("name", "张" + i);
  14. values.put("phone", "135" +i+i);
  15. values.put("salary", "2000" + i);
  16. db.insert("person", null, values);
  17. }
  18. }
  19.  
  20. }

list_item:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent" >
  4.  
  5. <TextView
  6. android:id="@+id/tv_name"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="name"
  10. android:textSize="25sp"
  11. />
  12. <LinearLayout
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:orientation="vertical"
  16. android:layout_alignParentRight="true"
  17. >
  18. <TextView
  19. android:id="@+id/tv_phone"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:text="phone"
  23. />
  24. <TextView
  25. android:id="@+id/tv_salary"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:text="salary"
  29. />
  30. </LinearLayout>
  31. </RelativeLayout>

activity.xml:

  1. <LinearLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".MainActivity"
  7. android:orientation="vertical"
  8. >
  9. <ListView
  10. android:id="@+id/lv"
  11. android:layout_width="match_parent"
  12. android:layout_height="match_parent"
  13. ></ListView>
  14. </LinearLayout>

把数据库内容显示在listview上的更多相关文章

  1. 从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上

    http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 这是一个接口,通过这个接口来获取数据并解析 大体上就是把解析的数据还有图片u ...

  2. 接收键盘输入的字符串,用FileWirter类将字符串写入文件,用FileReader类读出文件内容显示在屏幕上

    public class SY63 { public static void main(String[] args) throws Exception { System.out.print(" ...

  3. java servlet上传文件并把文件内容显示在网页中

    servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...

  4. 商务系统的构造思路(无源码!)+如何用jsp实现点击单选框内容显示在另一个jsp页面

    敲码经验总结: 之前犯了一个错误就是,没有从底层开始学起,有啥问题,就直接博客园找源码,去CSDN找源代码,看到代码就复制粘贴,结果从新梳理知识点的时候,貌似除了复制粘贴,印象深刻的知识啥也没学到. ...

  5. 用ListView实现对数据库的内容显示

    用ListView实现对数据库的内容显示 创建一个触发机制 ---------(作用)将数据读入ArrayList集合中 MyBase base = new MyBase(); SQLiteDatab ...

  6. jsp+oracle实现数据库内容以表格形式在前台显示(包含分页)

    jsp+oracle实现数据库内容以表格形式在前台显示(包含分页) 在文件夹内新增list_emp.jsp 代码如下: <%@ page contentType="text/html& ...

  7. PHP——分页显示数据库内容

    test.php <?php header("Content-Type:text/html;charset=utf-8"); //加载分页类 include "pa ...

  8. 判断数据库内容,在页面显示自定义数据case when

    判断数据库内容,在页面显示自定义数据 case when...then ...else...end 比如:数据库内容是这样: 通过sql语句判断,数据库的name字段,内容是月桂的,显示嫦娥,其他的显 ...

  9. Android数据库信息显示在listview上

    Key Points: 1.使用SimpleCursorAdapter将Android数据库信息显示在listview上 adapter = new SimpleCursorAdapter(this, ...

随机推荐

  1. JAVA自动装箱拆箱与常量池

    java 自动装箱与拆箱 这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的 ...

  2. C# 可变参数

    class Program { static void Main(string[] args) { //常规使用方法 Console.WriteLine(Add(, , , , , , , , })) ...

  3. windows phone 8 新增功能:从一个应用程序启动另一个程序(file association 和 Protocol association两种方式)

    一. 启动手机预装内置程序打开文件file association 这里以打开word文档为例子 string fileToLaunch = @"HelloKitty.docx"; ...

  4. angular学习文章

    https://www.jianshu.com/p/86c6249a2069 angular.cn https://segmentfault.com/a/1190000008754631

  5. NSSize 尺寸

    前言 结构体,这个结构体用来表示事物的宽度和高度. typedef CGSize NSSize; struct CGSize { CGFloat width; CGFloat height; }; t ...

  6. python3好用的mysql.connector库

    python3好用的mysql.connector库 from mysql.connector import connect #建立mysql连接,生成一个mysql.connector对象 conn ...

  7. 【bzoj3930】选数 容斥原理+暴力

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  8. JDBC_事务概念_ACID特点_隔离级别_提交commit_回滚rollback

    事务的概念 一组要么同时执行成功,要么同时执行失败的SQL语句,是数据库操作的一个执行单元! 事务开始于: 连接到数据库上,并执行一条DML语句(insert,update或delete),前一个事务 ...

  9. STM32F0 中 ADC 多通道转换结果相同的问题

    前言 前段时间调试 STM32F030 的 ADC,在多通道转换时遇到了奇怪的问题,使用官方的例程和库函数连续转换多个 ADC 通道,得到的几个通道的结果是一样的,解决办法参考了 关于STM32F0系 ...

  10. Android Toast语句应用

    1.findViewById()函数使用 函数作用:通过id来找到前台界面的组件 2.Toast语句 (1)介绍 (2)用法 (3)代码示例 package com.lucky.test21; imp ...