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

转载于:https://www.cnblogs.com/xmaomao/p/3169528.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值