Andriod基础2

目录:

        1.junit单元测试

        2.保存数据到rom中

        3.andriod下的文件访问权限

        4.数据保存到SDcard

        5.sharedPreference保存数据

        6.Pull解析xml

        7.SQLite数据库

 

 一.Junit单元测试

    在实际开发中需要不断地进行程序代码的测试,在andriod中可以使用Junit测试框架进行代码的测试。

    使用步骤:

    第一步:在AndriodMainfest.xml中加入下面的红色代码

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.lewu.action" android:versionCode="1“  android:versionName="1.0">
 <application android:icon="@drawable/icon" android:label="@string/app_name">
        <uses-library android:name="android.test.runner" />
        ....
 </application>
 <uses-sdk android:minSdkVersion="8" />
 <instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.itcast.action" android:label="Tests for My App" />

</manifest>

   在使用eclipse创建andriod工程的时候可以勾选Create a Test Project.在生成的测试工程的AndriodMainfest.xml中会自动添加

  

  第二步:编写单元测试代码:(继承AndriodTestcase)

    

1 import android.test.AndroidTestCase;
2 import android.util.Log;
3 public class XMLTest extends AndroidTestCase {
4      public void testSomething() throws Throwable {
5         Assert.assertTrue(1 + 1 == 3);
6      }
7 } 

  选中方法名--->右击"Run As--Android Junit Test"即可进行方法的测试

 

  二.保存数据到rom中

  Activity提供了OpenFileOutput()将数据输出到文件中

 1 package com.lewu.utils;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.util.HashMap;
 6 import java.util.Map;
 7 
 8 import android.content.Context;
 9 
10 public class FileService {
11     private Context context;
12 
13     public FileService(Context context) {
14         this.context = context;
15 
16     }
17 
18     /**
19      * 
20      * @param name
21      *            用户名
22      * @param password
23      *            密码
24      * @param filename
25      *            文件名
26      * @return
27      * @throws Exception
28      */
29 
30     public boolean saveToFile(String name, String password, String filename)
31             throws Exception {
32         FileOutputStream out = context.openFileOutput(filename,
33                 Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
34         String result = name + ":" + password;
35         out.write(result.getBytes());
36         out.close();
37         out.flush();
38         return true;
39     }
40 
41     /**
42      * 
43      * @param fileName
44      *        读入的文件名
45      * @return
46      */
47     public Map<String, String> getInfo(String fileName)throws Exception {
48         Map<String ,String> map = new HashMap<String, String>();
49         FileInputStream input = context.openFileInput(fileName);
50         byte[] result = StreamTools.getBytes(input);
51         String info = new String(result);
52         String str[] = info.split(":");
53         map.put("username", str[0]);
54         map.put("password", str[1]);
55         return map;
56     }
57 }

 

 

  StringTools工具类:

 

 1 package com.lewu.utils;
 2 
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.InputStream;
 5 
 6 public class StreamTools {
 7     
 8     /**
 9      * 读入数据到byte数组中
10      * @param in
11      * @return
12      */
13     public static byte[] getBytes(InputStream in)throws Exception {
14         ByteArrayOutputStream out = new ByteArrayOutputStream();
15         byte[] buffer = new byte[1024];
16         int len = 0;
17         while((len = in.read(buffer))!=-1){
18             out.write(buffer,0,len);
19         }
20         in.close();
21         out.flush();
22 
23         return out.toByteArray();
24     }
25 
26 }

 

  三.andriod下的文件访问权限:

    Context.MODE_PRIVATE:为默认的操作模式,代表文件是私有的数据,只能被应用本身访问。在该模式下,写入的内容会覆盖源文件的内容。

    Context.MODE_APPEND:把写入的内容追加到源文件中

    Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取

    Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

    如果希望文件被其他应用读和写,可以传入:   

    openFileOutput("lewu.txt", Context.MODE_WORLD_READABLE +                                                                               Context.MODE_WORLD_WRITEABLE);

 

 四:保存数据到SDCard:

   申请在sd卡中删除和创建的权限:

 

 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

   申请sd卡的写入数据的权限:

 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

   向sd卡中写入文件:

   在向sd卡中写入文件的时候需要先判断sd卡是否存在:if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED));

  

1     public boolean saveToSdcard() throws Exception {
2         //获取sd卡根目录
3         File SDCardDir = Environment.getExternalStorageDirectory();
4         File file = new File(SDCardDir, "lewu.txt");
5         FileOutputStream out = new FileOutputStream(file);
6         out.write("tangjie".getBytes());
7         out.close();
8         return true;
9     }

 

  五、使用sharedPreference保存数据

 

  六、Pull解析xml(XmlPullParse)

    第一步:创建Xml文件

1 <?xml version="1.0" encoding="UTF-8"?>
2 <Persons>
3     <person age="20">
4         <name>汤杰</name>
5     </person>
6      <person age="23">
7         <name>王振</name>
8     </person>
9 </Persons>

 

    第二步:获取XmlPullParse对象

1 XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
2 XmlPullParser parse = factory.newPullParser();
3 InputStream input = ma.open("Person.xml");

 

   第三步:对文档进行解析

 1 public static List<Person> xmlParse(InputStream in, XmlPullParser parse)
 2             throws Exception {
 3 
 4         parse.setInput(in, "utf-8");
 5         int eventType = parse.getEventType();
 6         List<Person> persons = null;
 7         Person person = null;
 8         while (eventType != XmlPullParser.END_DOCUMENT) {
 9             switch (eventType) {
10             case XmlPullParser.START_TAG:
11                 if (parse.getName().equals("Persons")) {
12                     persons = new ArrayList<Person>();
13                 } else if ("person".equals(parse.getName())) {
14                     person = new Person();
15                     String age = parse.getAttributeValue(0);
16                     person.setAge(age);
17                 } else if ("name".equals(parse.getName())) {
18                     String name = parse.nextText();
19                     person.setName(name);
20                 }
21 
22                 break;
23             case XmlPullParser.END_TAG:
24                 if ("person".equals(parse.getName())) {
25                     persons.add(person);
26                     person = null;
27                 }
28                 break;
29 
30             }
31             eventType = parse.next();
32         }
33         System.out.println(persons.size());
34         return persons;
35     }

 

    七、SQlite数据库

     1、创建数据库,借助SQLiteOpenHelper类完成

 1 package com.soyong.db;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6 
 7 public class SqlHelper extends SQLiteOpenHelper {
 8     private static final String name = "lewu.db";
 9     private static final int version = 1;
10 
11     public SqlHelper(Context context) {
12         super(context, name, null, version);
13     }
14 
15     @Override
16     public void onCreate(SQLiteDatabase db) {
17         System.out.println("创建数据库成功");
18         db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age integer)");  
19     }
20 
21     @Override
22     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
23         db.execSQL(" ALTER TABLE person ADD phone VARCHAR(12) NULL ");
24     }
25 }

    在调用SQLiteOpenHelper中的getWritableDatabase()或者getReadableDatabase()的时候,如果数据库不存在,就创建相应的数据库。在调用其中的onCreate方法。onCreate仅执行一次,一般用于创建表结构。onCreate方法用于更新操作,在每次数据库版本被修改的时候会执行

   2、编写数据库操作类进行数据库的增删改查

 1 package com.soyong.db;
 2 
 3 import android.content.Context;
 4 import android.database.Cursor;
 5 import android.database.sqlite.SQLiteDatabase;
 6 
 7 public class DbHandle {
 8     private SqlHelper helper = null;
 9 
10     public DbHandle() {
11     }
12 
13     public DbHandle(Context context) {
14         this.helper = new SqlHelper(context);
15     }
16 
17     public boolean find(String name) {
18         boolean result = false;
19         // 获取SQLLiteDatabases数据库的方法
20         SQLiteDatabase db = helper.getReadableDatabase();
21         if (db.isOpen()) {
22             Cursor curosr = db.rawQuery("select * from person where name=?",
23                     new String[] { name }); // 获取结果集的游标
24             if (curosr.moveToFirst()) {
25                 result = true;
26             }
27             curosr.close(); // 释放掉结果集的游标
28             db.close();
29         }
30         return result;
31     }
32 
33     public void add(int personid, String name, int age) {
34         SQLiteDatabase db = helper.getReadableDatabase();
35         if (db.isOpen()) {
36             db.execSQL("insert into person (personid,name,age) values (?,?,?)",
37                     new Object[] { personid, name, age });
38             db.close();
39         }
40     }
41 
42     public void update(int personid, int age) {
43         SQLiteDatabase db = helper.getReadableDatabase();
44         if (db.isOpen()) {
45             db.execSQL("update person set age=? where personid=?",
46                     new Object[] { age, personid });
47             db.close();
48         }
49     }
50     
51     public void delete(String name){
52         SQLiteDatabase db = helper.getReadableDatabase();
53         if (db.isOpen()) {
54             db.execSQL("delete from person where name=?", new Object[]{name});
55             db.close();
56         }
57 
58     }
59 }

 

 

 

 

posted @ 2013-05-04 18:18  tagie  阅读(288)  评论(0编辑  收藏  举报