笔记-Android学习历程
1. Junit
配置:在manifest节点下 写入instrumentation,在其兄弟节点下配置application
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.nubb.junit" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
二.文件存储(FileOutputStream / FileInputStream)
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.nubb.junit" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //对指定包下的类设置写权限
在对文件操作之前需要得到Context对象,在Activity中用getApplicationContext()方法获取
private Context context;
public FileService(Context context) {
this.context = context;
}
1. 写操作:ROM中、SD卡中
SD卡:
可以使用Environment.getExternalStorageDirectory()获取到SD卡所在的位置, 可以定义输出流指向SD卡上的文件
需要权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在操作SD卡时, 可以获取SD卡的状态 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
ROM中
openFileOutput(String, int) String为文件名, int为模式
模式分为4种. PRIVATE, WORLD_READABLE, WORLD_WRITEABLE, APPEND
也可以使用new FileOutputStream(String) 使用这种方法定义的输出流默认的文件权限和所在文件夹权限一致
/**
* 将指定内容写出到/data/data/包名/files文件夹中
* @param name 文件名
* @param content 文件内容
*/
public void saveToRom(String name, String content) throws Exception{
// FileOutputStream fos = new FileOutputStream("/data/data/com.nubb.junit/files/" + name); // 默认为Private
FileOutputStream fos = context.openFileOutput(name, Context.MODE_PRIVATE); // 打开一个文件输出流, 指向指定文件
fos.write(content.getBytes());
fos.close();
} /**
* 将指定内容写出到SD卡中
* @param name 文件名
* @param content 文件内容
*/
public void saveToSDCard(String name, String content) throws Exception{
File file = new File(Environment.getExternalStorageDirectory(), name); // 获取SD卡所在目录, 兼容所有版本
FileOutputStream fos = new FileOutputStream(file); // 默认所有用户可以读写
fos.write(content.getBytes());
fos.close();
}
2. 读操作
直接创建输入流关联文件即可
或者也可以使用openFileInput()找到/data/data/当前包名/files下的文件
public void testRead() throws Exception {
// FileInputStream fis = new FileInputStream("/data/data/com.nubb.junit/files/test.txt");
FileInputStream fis = getContext().openFileInput("test.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1)
baos.write(buffer, 0, len); // 将数据写到内存中
fis.close();
baos.close();
String s = new String(baos.toByteArray()); // 从内存中将数据获取出来转为字符串
System.out.println(s);
}
三.XML
1.解析
Xml.newPullPaser() 获取解析器.
使用getEventType()获取当前事件类型.
使用next()方法解析到下一个节点, 返回类型
类型共有5种. START_DOCUMENT、END_DOCUMENT 、START_TAG 、END_TAG 、TEXT
可以调用attribute()方法获取属性
可以调用nextText()获取下一个文本节点
public List<Person> getPersons(InputStream in) throws Exception{ //in对象可通过XXX.class.getClassLoader().getResourceAsStream("xxxxx.xml");
XmlPullParser parser = Xml.newPullParser(); // 获取Pull解析器
parser.setInput(in, "UTF-8"); // 设置输入流
List<Person> persons = null;
Person p = null;
for(int event = parser.getEventType(); event != XmlPullParser.END_DOCUMENT; event = parser.next()){
switch (event) {
case XmlPullParser.START_TAG:
if("persons".equals(parser.getName())){ // 当遇到persons标签时创建List
persons = new ArrayList<Person>();
}else if("person".equals(parser.getName())){ // 当遇到person标签时, 创建Person对象, 设置ID, 装入List
p = new Person();
p.setId(Integer.parseInt(parser.getAttributeValue(null, "id")));
persons.add(p);
}else if("name".equals(parser.getName())){ // 当遇到了name标签时, 获取出下一个文本, 设置到Person的name属性中
p.setName(parser.nextText());
}else if("age".equals(parser.getName())){ // 当遇到age标签时, 获取下一个文本, 转为int, 设置到Person的age属性中
p.setAge(Integer.parseInt(parser.nextText()));
}
}
}
return persons;
}
2.写出XML
Xml.newSerializer() 获取序列化工具
调用其对应的方法生成XML文档
四.SharedPreferences(轻型的数据存储方式)
1.写出
Context的getSharedPreferences(String, int)方法创建或获取SharedPreferences对象. String为文件名(不要加扩展名). int为文件权限
调用edit()获取到Editor对象, 调用其put方法设置数据. commit()提交数据. clear()清除数据
private void loadData() {
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
// SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
String username = preferences.getString("username", ""); // 获取数据转为String, 如果没有, 默认值为""
String address = preferences.getString("address", "");
int phone = preferences.getInt("phone", 0); // 获取数据转为int, 如果没有, 默认值为0
usernameET.setText(username); //传值
addressET.setText(address);
phoneET.setText(String.valueOf(phone));
}
public void onClick(View view){ //点击时间
String username = usernameET.getText().toString();
String address = addressET.getText().toString();
String phone = phoneET.getText().toString();
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
// SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE); // 获取SharedPreferences, 文件名不要指定扩展名
Editor editor = preferences.edit(); // 获取编辑器
try {
editor.putString("username", username);
editor.putString("address", address);
editor.putInt("phone", Integer.parseInt(phone));
editor.commit(); // 提交数据, 保存到文件
Toast.makeText(this, "保存成功", 0).show();
} catch (NumberFormatException e) {
e.printStackTrace();
editor.clear(); // 如果出了异常, 清空其中数据
Toast.makeText(this, "保存失败", 0).show();
}
}
2.读取
获取到SharedPreferences对象之后调用get()方法, 获取指定的值
五.SQLite数据库
1.创建和更新
定义类继承SQLiteOpenHelper
定义构造函数
重写onCreate()和onUpgrade()方法
在第一次获取数据库时会调用onCreate()方法, 当数据库存在版本不一致时会调用onUpgrade()方法
2.增删该查
通过getWriteableDatabase()和getReadableDatabase()获取数据库.
调用execSQL()方法可以执行SQL语句进行增删改操作.
调用rawQuery()方法进行查询操作. 返回Cursor, 调用其moveToNext()方法进行迭代. getXxx()方法获取其中的值
方法二:
操作数据库
1.另一种方式操作数据库
insert(), delete(), update(), query()
通过参数组装SQL语句, Android的API中有些方法适合使用这些方式查询
insert(String, String, ContentValues) 第二个参数是指定表中的一列, 目的为了在ContentValues中没有数据时能插入空记录
insert()方法和execSQL()方法不同, 如果用insert()插入, 可以获取插入的记录的id
2.事务控制
beginTransaction() 开启事务
endTransaction() 结束事务, 将最后一次成功标记之前的语句提交. 如果没有成功标记, 那么全部回滚.
setTransactionSuccessful(), 设置成功标记, 可以设置多个, 类似回滚点
笔记-Android学习历程的更多相关文章
- Android 学习历程摘要(二)
1.资源文件命名仅仅能小写,否则会报错生成不了R.java文件 2.R文件导包时应该导入自己project的包,而不是android.R 3.数据库操作使用SqliteOpenHelper 4.val ...
- Android 学习历程摘要(一)
初学Android,可能有些地方可能理解不正确,假设有朋友看到的话麻烦指正我一下,万分感谢. 1. 善用API DEMO,刚開始学习的人的需求基本在里面都能够满足,Eclipse导入API Demop ...
- Android 学习历程摘要(三)
1.proguard混淆:对与Activity等不应进行混淆.否则系统将找不到生命周期函数:JSON字符串要考虑混淆之后是否会影响字段名:native方法也不混淆,否则调用不到 2.ListView的 ...
- [ 原创 ]学习笔记-Android 学习笔记 Contacts (一)ContentResolver query 参数详解 [转载]
此博文转载自:http://blog.csdn.net/wssiqi/article/details/8132603 1.获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NA ...
- 【转】 Pro Android学习笔记(七八):服务(3):远程服务:AIDL文件
目录(?)[-] 在AIDL中定义服务接口 根据AIDL文件自动生成接口代码 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.n ...
- android学习系列:jercy——AI3 的博客
[android学习之十七]——特色功能2:桌面组件(快捷方式,实时文件夹) 二.桌面组件 1.快捷方式 Android手机上得快捷方式的意思可以以我们实际PC机器上程序的快捷方式来理解.而andro ...
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
随机推荐
- 【C/C++学院】0723-32位与64位/调戏窗体程序/数据分离算法/内存检索/二分查找法/myVC
[送给在路上的程序猿] 对于一个开发人员而言,能够胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中,由此简化系统的开发,是其架构生涯的第一步. ...
- pl/sql游标
通过游标,我们可以取得返回结果集的任何一行记录,提高效率. 定义游标: type 游标名 is ref cursor 变量名 游标名 打开游标: open 游标变量 for select语句: 取出当 ...
- iOS-国家代码选择功能github开源分享
三行代码集成国家区号选择功能 功能执行效果如图: 开源链接: https://github.com/qxuewei/XWCountryCode 用法: 1.导入XWCountryCode类 2.在须要 ...
- Java类集-set
Set接口是Collection接口的子接口,Set接口中不能插入反复元素 Set接口的经常使用子类: HashSet是set接口的一个子类.特点:里面不能存放反复元素,并且採用散列的存储方式.所以没 ...
- Subl 命令
Subl 是sublime 的命令 添加环境变量后可以,在cmd 或者git 下直接 使用subl 进行 打开sublime Example: Subl 打开编辑器 Subl . 将当 ...
- formidable 模块化开发 代码拆分(解耦) nodejs图片服务器架构
引言:程序要做到:健壮性.低耦合.可扩展.方便程序员分工合作 上传图片值nodejs服务器并显示图片的源代码: post.html : <!DOCTYPE html> <html l ...
- Linux /bin, /sbin, /usr/bin, /usr/sbin 区别(转)
在linux下我们经常用到的四个应用程序的目录是:/bin./sbin./usr/bin./usr/sbin bin: bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp ...
- java自定义注解与反射
java注解与反射一.Java中提供了四种元注解,专门负责注解其他的注解,分别如下 1.@Retention元注解,表示需要在什么级别保存该注释信息(生命周期).可选的RetentionPoicy参数 ...
- 基于iOS 10、realm封装的下载器
代码地址如下:http://www.demodashi.com/demo/11653.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重,再加上iOS10和X ...
- Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别
如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型. 从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是 ...