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(), 设置成功标记, 可以设置多个, 类似回滚点

更多相关文章

  1. framework之 ContextImpl文件解析
  2. android 判断手机是否联网 的方法
  3. Android外部存储(/storage/emulated/0)无法创建文件夹
  4. AndroidManifest.xml文件详解(uses-feature)
  5. Android APP OPS移除应用程序项目的修改方法
  6. Android Studio 导入so文件
  7. Android 开发 TextView中出现参差不齐状态解决方法
  8. Android的string.xml文件中的特殊字符显示

随机推荐

  1. Debug Android(安卓)and Linux suspend a
  2. Android Open Accessory Protocol 2.0
  3. 【Android增量升级系列_01】 浅谈Android
  4. quick cocos2dx解决ByteArray中readchar
  5. 享受Android应用程序的Java技术盛宴
  6. Android中xml的部分属性
  7. 如何一个android工程作为另外一个android
  8. Android Studio常用快捷键、Android Stud
  9. 多款Android播放器源码集锦(附开发教程)
  10. 对android夜间模式实现的探讨