把数据库内容显示在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, ...
随机推荐
- LibreOJ 6281 数列分块入门 5(分块区间开方区间求和)
题解:区间开方emmm,这马上让我想起了当时写线段树的时候,很显然,对于一个在2^31次方以内的数,开方7-8次就差不多变成一了,所以我们对于每次开方,如果块中的所有数都为一了,那么开方也没有必要了. ...
- MyEclipse2014配置2.5版本的struts2
原创 配置struts2一般来说需要以下步骤: 将项目所需要的Jar包导入项目webRoot/WEB-INF/lib下(包不追求多,容易导致冲突或者其他问题,需要多少导入多少) 配置struts.xm ...
- 生日蜡烛——第七届蓝桥杯C语言B组(省赛)第二题
原创 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始过生日 ...
- C#构造函数详解和析构函数详解
首先来了解下构造函数的定义: C#构造函数是一种特殊的成员函数,它的作用主要用于为对象分配存储空间,对数据成员进行初始化. 接下来看一下他的语法定义形式: |访问修饰符| 标识符 (|参数列表|) | ...
- 手动给kvm虚机挂载lvm卷
1.查看计算节点上虚机挂载的卷 [root@xgto01n010243186070 ~]# virsh domblklist instance- Target Source ------------- ...
- C语言条件编译(#if,#ifdef,#ifndef,#endif,#else,#elif)
1.条件编译介绍 条件编译(conditional compiling)命令指定预处理器依据特定的条件来判断保留或删除某段源代码.例如,可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代 ...
- Selenium辅助工具
下载Firefox39.0版本浏览器,安装firebug和FirePath.最新版的Firefox在扩展组件中无法找到firebug,可以使用旧的版本的Firefox浏览器. FirePath插件的使 ...
- [SinGuLaRiTy] 树链问题
[SinGuLaRiTy-1035] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 关于树链 树链是什么?这个乍一看似乎很陌生的词汇表达的其 ...
- hosts是什么意思?Hosts文件有什么作用和功能?
hosts是什么意思?Hosts文件有什么作用和功能? 熟悉网络的朋友们都会用到hosts文件,针对还不清楚hosts是什么意思以及hosts文件有什么功能和作用?针对此问题,本文就为大家进行解答 ...
- Shell等,不等......
-eq //等于 -ne //不等于 -gt //大于 (greater ) -lt //小于 (less) -g ...