name="android.test.InstrumentationTestRunner"
android:
targetPackage="com.xu.junittest"
>
2编写单元测试代码
packagecom.xu.junittest.service;
importjunit.framework.Assert;
importandroid.test.AndroidTestCase;
publicclassPersonServiceTestextendsAndroidTestCase
{
publicvoidtestSave()throwsException
{
PersonServiceservice=newPersonService();
service.save(null);
}
publicvoidtestAdd()throwsException
{
PersonServiceservice=newPersonService();
intresult=service.add(1,2);
Assert.assertEquals(3,result);
}
}
*****************************************************************************************************************************************************************
使用SAX或者DOM或者PULL解析XML文件
在Android平台上可以使用SimpleAPIforXML(SAX),DocumentObjectModel(DOM)和Android附带的pull解析器解析XML文件
Person.xml
xmlversion="1.0"encoding="utf-8"?
>
liming
30
zhangxiaoxiang
50
Person.java
packagecom.pull.domain;
publicclassPerson
{
privateIntegerid;
privateStringname;
privateIntegerage;
publicIntegergetId()
{
returnid;
}
publicvoidsetId(Integerid)
{
this.id=id;
}
publicStringgetName()
{
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
publicIntegergetAge()
{
returnage;
}
publicvoidsetAge(Integerage)
{
this.age=age;
}
@Override
publicStringtoString()
{
return"Person[id="+id+",name="+name+",age="+age+"]";
}
}
PersonService.java
packagecom.pull.service;
importjava.io.InputStream;
importjava.util.ArrayList;
importjava.util.List;
importorg.xmlpull.v1.XmlPullParser;
//importorg.xmlpull.v1.XmlPullParserFactory;
importandroid.util.Xml;
importcom.pull.domain.Person;
publicclassPersonService
{
publicstaticListgetPersons(InputStreamxml)throwsException
{
Listpersons=null;
Personperson=null;
//XmlPullParserpullPaeser=XmlPullParserFactory.newInstance().newPullParser();
XmlPullParserpullPaeser=Xml.newPullParser();//得到pull解析器
pullPaeser.setInput(xml,"UTF-8");//为pull解析器设置要解析的数据
intevent=pullPaeser.getEventType();
while(event!
=XmlPullParser.END_DOCUMENT)
{
switch(event)
{
caseXmlPullParser.START_DOCUMENT:
persons=newArrayList();
break;
caseXmlPullParser.START_TAG:
if("person".equals(pullPaeser.getName()))
{
intid=newInteger(pullPaeser.getAttributeValue(0));
person=newPerson();
person.setId(id);
}
if("name".equals(pullPaeser.getName()))
{
Stringname=pullPaeser.nextText();
person.setName(name);
}
if("age".equals(pullPaeser.getName()))
{
intage=newInteger(pullPaeser.nextText());
person.setAge(age);
}
break;
caseXmlPullParser.END_TAG:
if("person".equals(pullPaeser.getName()))
{
persons.add(person);
person=null;
}
break;
default:
break;
}
event=pullPaeser.next();
}
returnpersons;
}
/*保存数据到xml文件
*
*@parampersons
*@throwsException
*/
publicstaticvoidsave(Listpersons,OutputStreamout)throwsException
{
XmlSerializerserilaize=Xml.newSerializer();
serilaize.setOutput(out,"UTF-8");
serilaize.startDocument("UTF-8",true);
serilaize.startTag(null,"persons");
for(Personperson:
persons)
{
serilaize.startTag(null,"person");
serilaize.attribute(null,"id",person.getId().toString());
serilaize.startTag(null,"name");
serilaize.text(person.getName());
serilaize.endTag(null,"name");
serilaize.startTag(null,"age");
serilaize.text(person.getAge().toString());
serilaize.endTag(null,"age");
serilaize.endTag(null,"person");
}
serilaize.endTag(null,"persons");
serilaize.endDocument();
out.flush();
out.close();
}
}
Manifest.xml
xmlversion="1.0"encoding="utf-8"?
>
android="
package="com.pull.xmlparse"
android:
versionCode="1"
android:
versionName="1.0">
android:
minSdkVersion="8"
android:
targetSdkVersion="8"/>
android:
allowBackup="true"
android:
icon="@drawable/ic_launcher"
android:
label="@string/app_name"
android:
theme="@style/AppTheme">
android:
name="com.pull.xmlparse.MainActivity"
android:
label="@string/app_name">
name="android.intent.action.MAIN"/>
name="android.intent.category.LAUNCHER"/>
name="android.test.runner"/>
name="android.test.InstrumentationTestRunner"
android:
targetPackage="com.pull.xmlparse">
PersonServiceTest.java
packagecom.pull.test;
importjava.io.InputStream;
importjava.util.List;
importcom.pull.domain.Person;
importcom.pull.service.PersonService;
importandroid.test.AndroidTestCase;
importandroid.util.Log;
publicclassPersonServiceTestextendsAndroidTestCase
{
publicvoidtestPersons()throwsException
{
InputStreamxml=this.getClass().getClassLoader().getResourceAsStream("person.xml");
Listpersons=PersonService.getPersons(xml);
for(Personperson:
persons)
{
Log.i("PersonServiceTest",person.toString());
}
}
//保存一些数据到xml文件中
publicvoidtestsavePersons()throwsException
{
Listpersons=newArrayList();
persons.add(newPerson(43,"zhangshan",80));
persons.add(newPerson(42,"zhangshan1",80));
persons.add(newPerson(44,"zhangshan2",80));
persons.add(newPerson(45,"zhangshan3",80));
FilexmlFile=newFile(getContext().getFilesDir(),"file.xml");
FileOutputStreamout=newFileOutputStream(xmlFile);
PersonService.save(persons,out);
}
}
insertintoperson(name,number)values('zhangshan','10')
select*frompersonwherename='zhangshan'
updatepersonsetnumber='119'wherename='zhangshan'
deletefrompersonwherename='zhangshan'
内容提供者(contentprovider)
创建一个内容提供者
1继承contentprovider
2并在配置文件中配置
3定义一个uri的匹配器用于匹配uri
packagecom.hema.db;
importandroid.content.ContentProvider;
importandroid.content.ContentValues;
importandroid.content.UriMatcher;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
import.Uri;
publicclassPersonProviderextendsContentProvider{
//定义一个uri的匹配器用于匹配uri,如果路径不满足条件返回-1
privatestaticUriMatchermatcher=newUriMatcher(UriMatcher.NO_MATCH);
privatestaticfinalintINSERT=1;
privatestaticfinalintDELETE=2;
privatestaticfinalintUPDATE=3;
privatestaticfinalintQUERY=4;
privatePersonSQLiteOpenHelperhelper=null;
static
{
//添加一组匹配规则
matcher.addURI("com.hema.db.PersonProvider","insert",INSERT);
matcher.addURI("com.hema.db.PersonProvider","delete",DELETE);
matcher.addURI("com.hema.db.PersonProvider","update",UPDATE);
matcher.addURI("com.hema.db.PersonProvider","query",QUERY);
}
//
//content:
//com.hema.db.PersonProvider/insert添加
//content:
//com.hema.db.PersonProvider/delete添加
//content:
//com.hema.db.PersonProvider/update添加
//content:
//com.hema.db.PersonProvider/query添加
//当内容提供者被创建的时候调用适合数据初始化的操作
@Override
publicbooleanonCreate(){
helper=newPersonSQLiteOpenHelper(getContext());
returnfalse;
}
@Override
publicCursorquery(Uriuri,String[]projection,Stringselection,
String[]selectionArgs,StringsortOrder){
if(matcher.match(uri)==QUERY)
{
//返回查询的结果集
SQLiteDatabasedb=helper.getReadableDatabase();
Cursorcursor=db.query("person",projection,selection,selectionArgs,null,null,sortOrder);
returncursor;
}
else
{
thrownewIllegalArgumentException("路径不匹配,不能执行查询");
}
}
@Override
publicStringgetType(Uriuri){
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publicUriinsert(Uriuri,ContentValuesvalues){
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publicintdelete(Uriuri,Stringselection,String[]selectionArgs){
//TODOAuto-generatedmethodstub
return0;
}
@Override
publicintupdate(Uriuri,ContentValuesvalues,Stringselection,
String[]selectionArgs){
//TODOAuto-generatedmethodstub
return0;
}
}
Manifest.xml
name="com.hema.db.PersonProvider"
android:
authorities="com.hema.db.personprovider"
>
如何使用内容提供者
ContentResolverresolver=getContentResolver();使用获得的contentResolver对象对内容提供者进行增删改查的工作
packagecom.xu.providerother;
import.Uri;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.content.ContentResolver;
importandroid.database.Cursor;
importandroid.view.View;
publicclassMainActivityextendsActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public