目录:
一.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 }