Android SQLite 事务处理用法介绍
.使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。
代码如下 | 复制代码 |
public void payment() { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); db.beginTransaction();//开始事务 try { db.execSQL("update person set amount=amount-10 where personid=2"); db.execSQL("update person set amount=amount+10 where personid=5"); db.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。 } catch (SQLException e) { } finally { db.endTransaction(); } // 结束事务,有两种情况:commit,rollback, // 事务的提交或回滚是由事务的标志决定的,如果事务的标志为true就会提交,否则回滚,默认情况下事务的标志为false } |
应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。
而且不能保证所有数据都能同时插入
加事务处理,把5000条插入作为一个事务
我们使用SQLite的事务进行控制:
代码如下 | 复制代码 |
db.beginTransaction(); //手动设置开始事务 try{ //批量处理操作 for(Collection c:colls){ insert(db, c); } db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交 }catch(Exception e){ MyLog.printStackTraceString(e); }finally{ db.endTransaction(); //处理完成 } |
解析XML文件:
在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面,我将一一向大家详细介绍。
SAX解析器:
SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为。
SAX解析器的优点是解析速度快,占用内存少。非常适合在Android移动设备中使用。
DOM解析器:
DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。
由于DOM在内存中以树形结构存放,因此检索和更新效率会更高。但是对于特别大的文档,解析和加载整个文档将会很耗资源。
PULL解析器:
在Android平台上可以使用SAX、DOM和Android附带的pull解析器解析XML文件;
pull解析器提供了各种事件,使用parser.next()方法进入下一个元素并触发相应事件,pull解析器产生的事件是一个数字,可以通过switch对感兴趣的事件进行处理;通过paser.nextText()方法可以获取下一个Text类型的节点的值;
读取XML
代码如下 | 复制代码 |
XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(xml, "UTF-8");//为破解器添加要解析的XML数据 int event = pullParser.getEventType();//开始读取,获取事件返回值 pullParser.getName();//获取节点名称 pullParser.getAttributeValue(0);//获取第一个属性的值 pullParser.nextText();//获取标签之后的节点的内容 event = pullParser.next(); |
//解析器遇到结束标签不会自动向下解析,需要调用此方法进行继续执行;
保存文件到XML
代码如下 | 复制代码 |
public static void save(List<Person> persons, OutputStream outStream) serializer.startTag(null, "persons");//设置开始标签,第一个参数为namespace serializer.startTag(null, "name"); serializer.startTag(null, "age"); serializer.endTag(null, "person"); |
解析xml
代码如下 | 复制代码 |
<?xml version="1.0" encoding="utf-8"?> |
然后我们分别使用以上三种解析技术解析文档,得到一个List<Book>的对象,先来看一下Book.java的代码:
代码如下 | 复制代码 |
package com.scott.xml.model; public class Book { public void setId(int id) { public String getName() { public void setName(String name) { public float getPrice() { public void setPrice(float price) { @Override |
最后,我们还要把这个集合对象中的数据生成一个新的XML文档,生成的XML结构跟原始文档略有不同,是下面这种格式:
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8"?> |
接下来,就该介绍操作过程了,我们先为解析器定义一个BookParser接口,每种类型的解析器需要实现此接口。BookParser.java代码如下:
代码如下 | 复制代码 |
package com.scott.xml.parser; import java.io.InputStream; import com.scott.xml.model.Book; public interface BookParser { |
代码如下 | 复制代码 |
数据存储与访问常用方式: Activity(Context) Activity(Context)提供了openFileOutput(filename,mode)方法用于把数据输出到文件中; 如果希望文件被其它应用读和写:传入(Context.MODE_READABLE+Context.MODE_WRITEABLE) 例子 //写数据 FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE); byte [] bytes = writestr.getBytes(); fout.write(bytes); fout.close(); catch(Exception e){ //读数据 } //param 文件名称,操作方式 android有一套自己的安全模型,当应用程序(.apk)在安装时系统会分配给一个userid,当该应用去访问其它资源如文件的时候,会进行 userid的匹配,默认情况下任何应用创建的文件,sharedpreferences,数据库都是私有的(创建的文件保存在/data/data /<package name>/files目录下),只有指定操作模式为外部可读或写才可以被其它程序访问; 读取文件: <1> <2> ctrl + shift + x/y 大小写 从resource的raw中读取文件数据: String res = ""; //得到数据的大小 byte [] buffer = new byte[length]; //读取数据 //依test.txt的编码类型选择合适的编码,如果不调整会乱码 }catch(Exception e){ |
现在我来给大家总结一个实例
代码如下 | 复制代码 |
/** import java.io.FileInputStream; import android.content.Context; /** |
上面就可以实现对文件的读写操作了
无线网络通常我们讲到的是wifi网络,也就是大家笔记本电脑上的网,下面我来介绍小米2手机怎么连接无线网络吧,有需要的朋友可参考。1、在你小米手机中点击“系统”-“WLAN”如下图所示。
2、然后我们再点击“WLAN”和“自动搜索”功能
3、点击自动搜索之后小米手机就会自动搜索附近可以连接wifi网络了解。
4、找到可连接的网络之后我们再点击wifi然后再输入密码即可连接了。
手机wifi连接上但不能上网怎么办呢,下面我来总结关于导致wifi连接上了但是无法上网的原因分析与解决方法介绍,有碰到此类问题的朋友可进入参考。连接wifi不能上网
好的,第一步,我们先来确定无线路由器已经设定成功了。验证的方法的话,可以先在笔记本电脑上查看一下有没有我们的WIFI信号
看到有WIFI信号是第一步。第二步的话需要看一下这个信号是不是实际来自宽带网络,还是只是路由器的一厢情愿。验证方法是点击连接,让笔记本连接WIFI,输入设定的密码,如果有密码的话,打开百度首页
完成了上面的步骤之后,说明我们的WIFI信号已经完全没有问题。坐等接入新的移动设备。
好的,现在的问题是,我们手机明明显示已经接入WIFI信号了。可是还是上不了网,或者网速像蜗牛。点击进入WIFI设置,先看看是不是我们的WIFI信号
是啊,现在大家的WIFI信号那么多,还有那么多的干扰,移动的联通的“免费”的信号,很有可能自动接入的不是我们自己的WIFI信号。这时候只要及时点击选着我们的WIFI登录即可
好的,还有一种情况就是,明明连接的也是我们的账号,笔记本可以上网,可是手机的速度还是很慢很慢。怎么办?处理办法是这样的:首先确认你的其他启动设备没有过多的占用网速,可以先关闭它们试试
如果这一招还不管用,那么先试试重启一下我们的手机,或者关闭WIFI之后重新连接
如果步骤7还是不成功的话,我们需要使用杀手锏,那就是关闭无线路由器,让它休息10分钟。十分钟之后重新打开无线路由器电源。因为路由器经过长时间的使用难免出现状况。
wifi连接不上原因分析
检查附近的热点环境,确保手机处于wifi信号覆盖范围内。针对这种情况,一般在打开wifi的时候,会有附近热点的提示信息,如果没有提示信息,就可以确定附近没有热点,此时,应当重新配置热点。
确保你的操作步骤正确。具体操作方法是:进入手机设置 -> 无线网络设置 -> WLAN(勾选),进入“WLAN设置”在出现的列表中搜索到周边存在的无线局域网络,点击连接,输入密码,确定即可。
关闭并重启WiFi连接: 用手机上网,手机中会保留一个由WiFi连接分配的网络IP地址,它会被应用到当前Wi-Fi中,如果没有出现地址冲突,就不用担心,如果有冲突就得关闭并重启WiFi连接。方法如下: 打开手机菜单,进入“设置”栏,选择“无线和网络设置”,进入“Wi-Fi设置”项目,在新窗口中选择“关闭Wi-Fi”,在完成关闭操作后,重新进入该项目,选择“打开Wi-Fi”,即可重启Wi-Fi连接.
查看Wi-Fi高级设置:有时在问题还未解决的情况下,下面要做的就是进入安卓手机Wi-Fi的高级设置进行相关设置了。 打开手机菜单,进入“设置”窗口,选择“无线和网络”,进入“Wi-Fi设置”,然后进入“高级”选项,进入“代理服务器设置”,确认安卓设备没有使用代理服务器,如果在代理部分发现IP地址或者域名的话,将其删除,即可解决Wi-Fi连接故障
硬件替换法:先更换其他智能手机移动终端测试(Andriod系统手机为最佳),连接相同无线路由器,以确定是否能正常访问网络,该路由器是否支持上网功能;借此来判断不能上wifi的问题所在。
关闭Wi-Fi休眠策略:如果Wi-Fi经常出现问题的话,使用者应该尝试将WiFi休眠策略设置为“从不”,看看问题会不会消失。如果将该策略设置为“从不”的话,耗费的电力将会上升,但是从另外的方面来看,这也会让Wi-Fi连接更稳定。
设置静态IP地址:还有一种解决方法就是为安卓设备设置静态IP地址。这表明用户需要连接的路由器上可能存在DHCP地址分配方面的问题,或者设备获得了错误的地址。为了设置静态IP地址,需要进入静态IP地址设置栏将信息输入进去(IP地址、网关、子网掩码、DNS等项目)。 设置静态IP地址的唯一问题是它将适用于所有的Wi-Fi,因此只有在用户仅仅连接到一张Wi-Fi上的情况时,才能使用这种方法解决问题。
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 这篇文章主要介绍了C#简单访问SQLite数据库的方法,涉及SQLite数据库的下载、安装及使用C#连接、查询SQLIte数据库的相关技巧,需要的朋友可以参考下...2020-06-25
- 最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
- 这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25