Shared Preferences
配置文件:windows *.ini,存储都是key-value对
适应场景:一个用户的登录信息,是否自动更新程序,游戏背景声音是否播放
存储位置:data/data/包名/shared_prefs/xxx.xml
获取Shared Preferences
方法1:getPreferences(MODE_PRIVATE);
以当前Activity的名字作为存储的名字
方法2:getSharedPreferences(自定义名字, MODE_PRIVATE)
模式的作用:一般都是选择私有,只要自己的当前应用程序才可以访问
保存
只能存储boolean,int,float,String,long这些数据类型
editor.putString(USERNAME, usernameString);
editor.putString(PASSWORD, passwordString);
editor.putBoolean(ME, true);
// 提交方法
editor.commit();
清除数据
// 清除已经保存的所有数据,文件是不会被删除的
editor.clear().commit();
清除部分数据:把值变成空字符串存储
editor.putString(USERNAME, “”);
获取数据
传入对应存储值的key,后面一个参数表示没有取到值的时候设置默认值
sp.getBoolean(ME, false);
sp.getString(USERNAME, "")
PreferenceActivity
怎样使用
1.MainActivity extends PreferenceActivity
2.加载xml的sp的配置文件
addPreferencesFromResource(R.xml.setting);
生成的文件名:
data/data/包名/shared_prefs/包名_preferences.xml
重点:配置文件
公共属性:
android:key保存到sp里面key的名称
android:defaultValue默认值
android:title标题
android:summary标题下面的内容
CheckBoxPreference
android:dialogTitle表示弹出的选项框里面的标题
EditTextPreference
android:entries表示点击后出现了下拉列表
android:entryValues出现下拉列表对应的值
ListPreference
怎样获取PreferenceActivity里面存储的配置值
SharedPreferences sp = getSharedPreferences(this.getPackageName()
+ "_preferences", MODE_PRIVATE);
//建议使用此方法 SharedPreferences sp = getPreferenceManager().getSharedPreferences();
Map<String, Object> map = (Map<String, Object>) sp.getAll();
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("key:" + entry.getKey() + ",value:"
+ entry.getValue());
}
Internal Storage内部存储器
文件存放的位置:data/data/包名/files/xxx.txt
使用IO代码保存文件
权限固定:-rw-------
如果直接使用io代码写文件,其他应用程序是不可以读,写
String FILE_PATH = "data/data/gz.itcast.file/files/test.txt";
File file = new File(FILE_PATH);
// 先判断父目录是否存在
File parentFile = file.getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
// file.mkdirs();//错误:生成目录data/data/gz.itcast.file/files/test.txt(目录/文件夹)
FileOutputStream stream = new FileOutputStream(file, true);
stream.write(content.getBytes());
stream.flush();
stream.close();
使用Android API保存文件
此方式保存文件的权限是根据mode的值来进行相应的处理
私有:-rw-rw----Context.MODE_PRIVATE
读写:-rw-rw--rw--
Context.MODE_WORLD_READABLE| Context.MODE_WORLD_WRITEABLE
FileOutputStream=context.openFileOutput(文件名称,文件的模式)
使用Android API读取文件
只能读取自己应用程序的内部文件
FileInputStream=context.openFileInput(文件名称
使用IO代码读取文件
读取自己应用程序的内/外部文件:
文件路径有所不同
内部:data/data/自己应用程序的包/files/文件名
外部:data/data/提供数据应用程序的包/files/文件名
(必须由提供数据应用程序配置相应的权限才可以读、写)
File file = new File(FILE_PATH);
// 字节流
FileInputStream inputStream = new FileInputStream(file);
// 转换流
InputStreamReader reader = new InputStreamReader(inputStream);
// 字符流
BufferedReader bufferedReader = new BufferedReader(reader);
while (bufferedReader.ready()) {
System.out.println(bufferedReader.readLine());
}
bufferedReader.close();
文件的模式
Context.MODE_APPEND追加
Context.MODE_PRIVATE私有
Context.MODE_WORLD_READABLE可读
Context.MODE_WORLD_WRITEABLE可写
AndroidTestCase
在android不能运行main函数,也不能运行TestCase
1.必须写一个类继承至AndroidTestCase
2.public void testXXX()方法名称的定义
3.AndroidManifest.xml注意位置
a.放到application的外面
<!-- 配置1:配置测试选项 ,android:targetPackage要求与manifest package要一致 -->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="gz.itcast.file" >
</instrumentation>
b.放到application的里面
<!-- 配置2:引入一个测试jar文件 -->
<uses-library android:name="android.test.runner" />
External Storage
Sdcard外部存储器,存储一些比较大的文件,下载离线数据,视频文件
配置写sdcard的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Sdcard的路径
android版本2.1(含)以下:sdcard
android版本2.2(含)以上:mnt/sdcard
获取sdcard状态/挂载的常量
Environment.getExternalStorageState();
Environment.MEDIA_MOUNTED
PULL解析器
获取解析器
1.方法1
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
2.方法2
XmlPullParser parser = Xml.newPullParser();
// 设置需要解析的文件
FileInputStream inputStream = context.openFileInput(NAME);
parser.setInput(inputStream, ENCODING);
解析原理
根据解析事件类型的不同
开始文档,开始元素,文本节点,结束元素,结束文档
while (eventType != XmlPullParser.END_DOCUMENT) {
解析处理
// 改变循环条件值的代码
eventType = parser.next();
}
写xml文件
FileOutputStream os = context
.openFileOutput(NAME, Context.MODE_PRIVATE);
// 写出路径
serializer.setOutput(os, ENCODING);
方法1直接把xml文件作为字符串直接输出
方法2 使用Pull API
开始文档serializer.startDocument(ENCODING, true);
开始根节点serializer.startTag(NAME_SPACE, "persons");
结束根节点serializer.endTag(NAME_SPACE, "persons");
结束文档serializer.endDocument();
BaseAdapter
重写5个方法
最主要的方法getItem:优化里面创建对象的次数
// 产生每一行的item的代码
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView:" + position);
Person person = getItem(position);
View textView;
// 减少实例化TextView开销
if (convertView == null) {
textView = new TextView(PullActivity.this);
System.out.println("1111111111");
} else {
System.out.println("2222222222");
textView = convertView;
}
((TextView) textView).setTextSize(20F);
((TextView) textView).setText(person.toString());
return textView;
}
SQLite Databases
数据库
Network Connection
网络