Android内置的SQLite数据库,学习了增删改查。
SharedPreferences进行数据存储:
Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:
SharedPreferences背后是使用xml文件保存数据,getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。
使用SQLite数据库存储数据:
SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。
SQLiteOpenHelper对数据库进行版本管理:
我们开发的软件可能会安装在成百上千个用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢?总不能在每个需要安装此软件的手机上通过手工方式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版本进行管理来实现前面提出的需求。
为了实现对数据库版本进行管理,SQLiteOpenHelper类提供了两个重要的方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2(有同学问设置为3行不行?当然可以,如果你愿意,设置为100也行),并且在onUpgrade()方法里面实现表结构的更新。当软件的版本升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后作出相应的表结构及数据更新。
getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
使用SQLiteDatabase操作SQLite数据库:
Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。 execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。
使用ContentProvider共享数据、从互联网上获取数据,以及上传数据(文件)到互联网上面:
ContentProvider(内容提供者)
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。
一旦应用继承了ContentProvider类,我们就会把这个应用称为ContentProvider(内容提供者)。
当应用需要通过ContentProvider对外共享数据时,第一步需要继承ContentProvider并重写下面方法:
public class PersonContentProvider extends ContentProvider{
public boolean onCreate()
public Uri insert(Uri uri, ContentValues values)
public int delete(Uri uri, String selection, String[] selectionArgs)
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
public String getType(Uri uri)}
第二步需要在AndroidManifest.xml使用<provider>对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider , ContentProvider 采用了authorities(主机名/域名)对它进行唯一标识,你可以把 ContentProvider看作是一个网站(想想,网站也是提供数据者),authorities 就是他的域名:
<manifest .... >
<application android:icon="@drawable/icon" android:label="@string/app_name">
<provider android:name=".PersonContentProvider" android:authorities="cn.itcast.provider.personprovider"/>
</application>
</manifest>
Uri代表了要操作的数据,Uri主要包含了两部分信息:1》需要操作的ContentProvider ,2》对ContentProvider中的什么数据进行操作,
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。
从互联网上获取数据:利用HttpURLConnection对象,我们可以从网络中获取网页数据,
从connectionl里面获取输入流,得到了输入流,我们就可以对其进行保存,播放等。
URL url = new URL("http://photocdn.sohu.com/20100125/Img269812337.jpg");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5* 1000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream is = conn.getInputStream();
上传数据到互联网:
不用浏览器,我们也可以上传数据(文件)的哦,我们可以模拟Http请求,利用连接得到输出流,将数据写到输出流:
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
conn.setDoOutput(true);//发送POST请求必须设置允许输出
conn.setUseCaches(false);//不使用Cache
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");//维持长连接
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
outStream.write(data);
outStream.flush();
if( conn.getResponseCode() == 200 ){
String result = readAsString(conn.getInputStream(), "UTF-8");
outStream.close();
System.out.println(result);
}
分享到:
相关推荐
《Android2.2天气预报系统开发详解》 在当今信息化社会,实时获取天气信息成为人们日常生活的重要需求。本文将深入探讨一个基于Android2.2的天气预报系统,它利用中央气象台提供的接口,为用户提供准确、及时的天气...
实现通过GPS或NetWork获取当前位置的经纬度,并且在Google Map Android v2上显示
Android2.2天气预报程序源码+开发文档,Java毕业设计+开发文档,写一款Android2.2小程序,读取中央气象台的天气预报API得到天气数据,由此扩展出Android天气预报源码。虽然获取天气时你首先要知道对应的城市码,有点...
### Pro Android 2:深入学习Android 2平台及其高级特性 #### 一、概述与背景 《Pro Android 2》是一本由Sayed Y. Hashimi、Satya Komatineni和Dave MacLean合著的专业书籍,由Apress出版社于2010年出版。本书针对...
它基于Android 4.2的源码进行提取,并且已经在Android 2.x和4.x版本上进行了测试,确保了兼容性。 在Android系统中,汉字转拼音的实现通常涉及到以下几个关键知识点: 1. **Android源码分析**:Android源码提供了...
翻译可能包含了从Android 2.x到最新的Android 12的各种版本特性,如Material Design设计语言的进化、性能优化、隐私控制的加强等。 4. **安全与隐私** 随着用户对数据安全和隐私的关注度提高,Android系统也在不断...
Android开发入门教程是一本面向初学者的教材,它详细介绍了如何使用Android平台开发2.x版本的应用程序。本教程由Mark L. Murphy撰写,他是Android学习社区CommonsWare的创始人以及多本Android开发畅销书的作者。在...
[14本经典Android开发教程] 9 Android2 3用户手册 已上传8本: [14本经典Android开发教程] 1 Android开发从入门到精通 http: download csdn net detail cleopard 8355245 [14本经典Android开发教程] 2 Android...
2. **Ice Cream Sandwich**:这个版本是Android系统的一个重要里程碑,它将Android 3.0(Honeycomb)为平板电脑设计的特性与Android 2.x系列进行了整合,使得手机和平板的应用体验更加一致。 3. **UI改进**:...
android-2.2 mms.apk 复制短信到usim卡
本书将引领大家开发引人入胜的android 2.x应用,包括如何设计gui、如何使用gps和访问web服务,以及如何将理念转换成实际应用! 本书包含大量即时可用的简单示例,自此之后,构建实际、流行的应用将不再困难,只要你...
2. **实现步骤** - **权限申请**:在AndroidManifest.xml中添加USB或串口所需的权限,如`<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />`和`<uses-feature android:name="android....
《Android相机HAL与V4L2详解》 在Android系统中,相机功能是不可或缺的一部分,其背后的实现机制涉及到了复杂的硬件接口和驱动程序。本文将深入探讨Android Camera Hardware Abstraction Layer (HAL) 和Video for ...
android:title="选项2" /> <!-- 更多选项... --> ``` 接下来,在Activity中初始化`DrawerLayout`和`NavigationView`,并监听点击事件: ```java import androidx.drawerlayout.widget.DrawerLayout; public ...
2. **Activity与布局**:扫雷游戏的核心是用户界面,这需要通过Activity来实现。Activity是Android应用中的一个独立窗口,负责处理用户交互。你会学习到如何使用XML文件创建布局,并在Java代码中动态操作布局元素。 ...
Android新编译规则Android.bp文件语法规则详细介绍,条件编译的配置案例。 Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk 文件的。在 Android7.0 以前,Android 都是使用 ...
var data = {"key1": "value1", "key2": "value2"}; window.androidBridge.handleJsonData(JSON.stringify(data)); ``` 这里的`JSON.stringify()`函数用于将JavaScript对象转换为JSON字符串,因为Android方法通常...
第2篇为应用开发篇,通过实例介绍了Android UI布局、Android人机界面、手机硬件设备的使用、Android本地存储系统、Android中的数据库、多线程设计、Android传感器、Android游戏开发基础、Android与Internet,以及...
2. **代码编写与调试** - 主活动(MainActivity.java)是应用的入口点,这里编写Java或Kotlin代码实现应用逻辑。Android Studio提供强大的代码补全(IntelliSense)和重构工具,使得编码更高效。 - 调试是开发过程...
在Android开发中,为UI元素添加虚线、圆角和渐变效果是常见的需求,可以提升应用的视觉吸引力。下面将详细讲解如何实现这些效果。 ### 一、虚线(Dashed Line) 在Android中,我们可以使用`Shape Drawable`来创建...