xstream使用初步
工程目录结构
建两个原型Human,Cat
Human.java
import java.util.List; public class Human { private String name; private String sex; private List<Cat> cats; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public List<Cat> getCats() { return cats; } public void setCats(List<Cat> cats) { this.cats = cats; } @Override public String toString() { return "Human [name=" + name + ", sex=" + sex + ", cats=" + cats + "]"; } }
Cat.java
public class Cat { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text2" /> </LinearLayout>
一个用来测试的res/raw/test.xml
<tong.android.model.Human> <name>爷们</name> <sex>男</sex> <cats> <tong.android.model.Cat> <name>cat0</name> <sex>公</sex> </tong.android.model.Cat> </cats> </tong.android.model.Human>
然后就是主要的处理文件ActivityMain.java
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; import tong.android.model.Cat; import tong.android.model.Human; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv ; private TextView tv2 ; private String xml; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.text); tv2 = (TextView) findViewById(R.id.text2); toXml(); fromXml(); } private void toXml() { XStream xs = new XStream(); Human h = new Human(); h.setName("爷们"); h.setSex("XX"); List<Cat> cats = new ArrayList<Cat>(); for(int i=0;i<3;i++){ Cat c = new Cat(); c.setName("cat"+i); c.setSex("..."); cats.add(c); } h.setCats(cats); xml = xs.toXML(h); tv.setText(xml); writeXml(); } private void fromXml() { BufferedReader br = readXml(); XStream xs = new XStream(); //StringReader in = new StringReader(xml); Human h = (Human) xs.fromXML(br); tv2.setText(h.toString()); } private BufferedReader readXml() { InputStream is = this.getResources().openRawResource(R.raw.test); BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(is, "utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return br; } private void writeXml() { } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
就可以简单的构建xstream的测试环境,但是,要保持编码一致性,尽量使用utf-8
还有这里面没有使用别名,希望大家留点神,注意观察下test.xml他的节点,是<包名.Human>不要搞错了
需要引入两个包