Android之数据存储笔记

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
网络


你可能感兴趣的:(android)