下面介绍的是在Android Studio中的使用
Android Studio中目前支持的Xstream最高版本是xstream-1.4.7.jar,我是直接将jar包放到libs中使用的,因为我尝试在build.gradle中complie,但是编译的时候还是不通过。
我使用的是okhttp的client。
下面介绍的是项目开发中从网络获取xml文件并解析成javaBean的方法。
1.网络服务器中的xml文件
<person name="johnson"> <firstname>Joe</firstname> <lastname>Walnes</lastname> <phone> <phoneno>0107654321</phoneno> </phone> <phone> <phoneno>13800008888</phoneno> </phone> </person>
2. javaBean
//设置Person类在xml中的别名@XStreamAlias("person")public class Person { //将name设置为XML person字段的 attribute @XStreamAsAttribute() private String firstname; private String lastname; //该变量不是xml中的一个字段,应去掉 @XStreamImplicit() private List<Phone> phone = new ArrayList<Phone>(); @Override public String toString() { return "Person{" + "firstname=‘" + firstname + ‘\‘‘ + ", lastname=‘" + lastname + ‘\‘‘ + ‘}‘; } public List<Phone> getPhoneno() { return phone; } public void setPhoneno(List<Phone> phone) { this.phone = phone; } class Phone{ String phoneno; @Override public String toString() { return "Phone{" + "phoneno=" + phoneno + ‘}‘; } }}
3.使用
public void test() { OkHttpClient okHttpClient = new OkHttpClient();//定义client Request request = new Request.Builder().url("http://192.168.1.100:8080/test/test.xml").build();//定义request okhttp3.Call call = okHttpClient.newCall(request);//用client使用call call.enqueue(new okhttp3.Callback() {//异步请求网络数据 @Override public void onFailure(okhttp3.Call call, IOException e) {//请求失败的情况 System.out.println("fail:"); e.printStackTrace(); } @Override public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException {//请求成功的情况 XStream xStream = new XStream(new DomDriver("UTF-8")); //对指定的类使用Annotations 进行序列化,这步非常关键 xStream.processAnnotations(Person.class); if (response.isSuccessful()) { String string = response.body().string(); Person person = (Person) xStream.fromXML(string); System.out.println(person.toString()+person.getPhoneno().toString());
} } });}
其实也就这步关键而已,其他的不重要:
//对指定的类使用Annotations 进行序列化
xstream.processAnnotations(Person.class);
运行结果:
Person{firstname=‘Joe‘, lastname=‘Walnes‘}[Phone{phoneno=0107654321}, Phone{phoneno=13800008888}]
时间: 2024-10-13 10:48:05