Android开发——SQLite数据库、ListView、网络编程4
来源:互联网 发布:男生礼物 知乎 编辑:程序博客网 时间:2024/06/08 01:04
SQLite数据库
说明:这是一个轻量级数据库,嵌入式数据库
数据库的存储数据的意义:当有大量相似结构的数据需要存储的时候,并且具有查询速度快的特点
特点:sqlite数据库底层都是以字符串类型保存,不会区分存入数据库中数据的类型
1.SQLiteOpenHelper抽象类
位置:android.database.sqlite.SQLiteOpenHelper包
功能:一个建立数据库的帮助类
2.SQLiteDatabase终类
位置:android.database.sqlite.SQLiteDatabase包
两种增删改查方法相比较:
(1)sql语句法写整句的sql语句容易出错,并且方法没有返回值
(2)定义好的方法不够灵活,不容易进行多表查询
特殊:(查询数据库中数据通过命令行:sqlite3)
(1)【adb shell】==>【cd data/data/包名/databases】==>【sqlite3 person.db】==>这之后即可输入sql语句操作数据库表了
(2)乱码解决:上边方法会因为你的命令行的解码方式是GBK,Linux用的是utf-8而出现乱码,可通过【chcp 65001】命令改变命令行的解码方式。【chcp 936】是GBK
3.ContentValues终类
位置:android.content.ContentValues包
功能:封装数据的对象,底层封装了一个HashMap
ListView控件
1.ListView类
位置:android.widget.ListView包
特点:存放的内容是一个一个的条目
注意:当ListView的高度是包裹内容时,就会做多次检验而调用很多次getView方法,为了确定是否这个高度能把全部条目显示出来
添加ListView的脚布局
获取ListView条目的数量,包括header和footer
2.ListAdapter接口
位置:android.widget.ListAdapter包
意义:作为ListView全部填充内容适配器的超类接口
2.1 BaseAdapter抽象类
2.2 ArrayAdapter<T>类
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
2.3 SimpleAdapter类
3.三种布局填充器的写法
/*** 方法1:* 参数:上下文,源布局的id* ViewGroup:里面可以有自己的孩子,不为空返回的是ViewGroup的父亲,就是布局中的根节点 */View view = View.inflate(getApplicationContext(), R.layout.item, null);/*** 方法2:通过布局填充器LayoutInflater对象的静态方法填充*/view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);/*** 方法3:通过服务获取填充器,然后调用填充器中的填充方法*/LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);view = inflater.inflate(R.layout.item, null);
4.常见ListView写法
private class MyAdapter extends BaseAdapter {private ViewHolder holder;private BitmapUtils utils;@Overridepublic int getCount() {return list.size();}@Overridepublic News getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = View.inflate(context, R.layout.item_news_listview, null);holder = new ViewHolder();holder.iv_img = (ImageView) convertView.findViewById(R.id.iv_img);holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);holder.tv_pub_date = (TextView) convertView.findViewById(R.id.tv_pub_date);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}utils = new BitmapUtils(context);utils.display(holder.iv_img, list.get(position).listimage);holder.tv_title.setText(list.get(position).title);holder.tv_pub_date.setText(list.get(position).pubdate);// 对已经读过的条目标题进行标红处理if (list.get(position).isRead) {holder.tv_title.setTextColor(Color.GRAY);} else {holder.tv_title.setTextColor(Color.BLACK);}return convertView;}}static class ViewHolder {public ImageView iv_img;public TextView tv_title;public TextView tv_pub_date;}
网络编程
知识点:
(1)Android中主线程不能进行耗时的操作,(如网络连接、拷贝大数据等)会抛出anr异常——Application not response异常,应用无响应。解决方法:在子线程中进行这些操作
(2)在4.0系统后,当你在主线程中只要访问网络就会抛出NetWorkOnMainThreadException
(3)在4.0系统后,规定了只有主线程才能更新UI,其他线程对UI控件进行操作会抛出ViewRootImpl$CalledFromWrongThreadException
(4)android系统底层有一个审计机制,这个机制禁止其他线程更新UI,这个机制在应用界面完全可见时才会开启,就是在OnStrart方法之后运行的更新操作会被禁止。如果你更新的操作在这个机制启动时间之前,则能更新UI
(5)与进度相关的UI都可以在子线程中更新UI
1.HttpURLConnection抽象类
2.消息传递机制
原理:解决子线程更新UI的问题。把子线程中获取的数据封装到Message对象中的obj中或者Bundle中,通过Handler对象把数据发送回主线程的复写的HandeMessage()方法中,然后更新UI即可。
传送的过程:Message对象被传到Handler对象中的消息队列中,这里有一个Looper的监听器会监听这个消息队列,只要检测到有信息存入就会把信息发送到HanleMessage()方法中
2.1 Message终类
位置:android.os.Message包
2.2 Handler
位置:android.os.Handler包
3.更新UI的特殊方法
3.1 Activity类
位置:android.app.Activity包
4.SmartImageView开源项目
描述:这是一个开源框架,定义了解析图片的url地址,更新UI的功能【setImageUrl(String url)】
原理:就是定义一个类SmartImageView继承ImageView,然后内部定义解析url地址获取Bitmap对象的方法,然后再调用setImageBitmap方法设置控件的图片数据
5.HttpClient接口
位置:org.apache.http.client.HttpClient包
功能:能够运行Http请求,处理cookie。作为第二种实现登录注册的方法
缺点:更新UI仍需要用消息传递机制或者runOnMainThread()这种方法才能实现,没有把这一整体操作全部封装好
5.1 DefaultHttpClient类
作用:一般new对象都是new的这个类的对象
5.2 HttpGet类
描述:是HttpUriRequest的实现类,get方式的http的请求对象。一般通过其构造函数初始化这个对象
HttpGet(String uri)
通过制定uri路径建立请求对象
5.3 HttpResponse接口
描述:响应对象,可以通过此对象获取http响应中的数据
5.4 HttpPost类
描述:HttpuriRequest的实现类,post请求方式的http对象,此对象定义了封装数据实体
5.5 UrlEncodedFormEntity类
描述:HttpEntity接口的实现类,可以封装Ur表单l类型的数据的实体
5.6 BasicNameValuePair类
描述:NameValuePair接口的实现类,可以封装键值对形式的表单数据
6.AsyncHttpClient开源项目
(1)Get方式发送请求
// 建立框架的主要客户端对象AsyncHttpClient client = new AsyncHttpClient();// 调用get方法来想服务端发送get请求client.get(path, new AsyncHttpResponseHandler() {// 请求成功时调用@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {// 获取服务端返回的数据Toast.makeText(getApplicationContext(), new String(responseBody, "gbk"), 1).show();} catch (Exception e) {e.printStackTrace();}}// 请求失败时调用@Overridepublic void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {System.out.println("请求失败!");}});
(2)Post方法发送请求
AsyncHttpClient client = new AsyncHttpClient();// 向Asyn客户端对象中填充参数对象RequestParams params = new RequestParams();params.put("username", username);params.put("password", password);// 发送Post请求client.post(path, params, new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {Toast.makeText(getApplicationContext(), new String(responseBody, "gbk"), 0).show();} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {System.err.println("请求失败!");}});
- Android开发——SQLite数据库、ListView、网络编程4
- Linux网络编程——SQLite数据库
- Android_02--SQLite数据库+ListView控件+Android网络编程+多线程断点下载
- Android应用开发---SQLiteOpenHelper管理SQLite数据库、ListView
- Android开发案例:SQLite数据库和ListView列表结合
- Android SQlite数据库编程
- Android数据库编程SQLite
- SQLite—Android数据库
- Android 开发 SQLite数据库
- Android开发-SQLite数据库
- 开发] Android数据库高手秘籍(一)——SQLite命令
- android开发学习(三)——sqlite数据库
- Android开发——SQLite数据库框架Sugar的使用
- Android开发——SQLite数据库初体验(一)
- Android开发——SQLite数据库初体验(二)
- Android App开发基础篇—数据存储(SQLite数据库)
- Android——(SQLite数据库)ListView控件之商品展示案例
- Android基础知识:单元测试、SQLite数据库和ListView
- Lottery bring confusion
- IDF实验室之牛刀小试被改错的密码
- 深入Boost.asio的异步Tcp通信的server、client,可用来当程序骨架。
- IDF实验室之牛刀小试最简单的题
- mysql查看和设置连接数
- Android开发——SQLite数据库、ListView、网络编程4
- 迷你猜数
- hortonworks hadoop相关安装
- 孔浩老师的CMS项目源码部署问题
- 【TreeSet】的应用及【泛型】高级应用总结
- Something what you should know (floating point)
- Dubbo源码分析(三):Dubbo之服务端(Service)
- Java的Interface-笔记
- Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写