前段时间用ios做了个xml的解析,文件解析还算顺利吧。在ios上的解析步骤:1.使用第三方库
2.发动请求 3.解析xml 4.显示数据
随后做了一个android上的解析模块,流程如下:1.发送一个http请求(java中有内置的http的相关代码,不再粘贴) 2.解析数据 3.展示数据
主要粘贴一下android上解析模块,这一块花费了点时间,我当初不怎么看重这一块,一直以为是别的地方出的错。后来发现错误有点台离奇了。不多说,粘贴代码
<?xmlversion="1.0"encoding="utf-8"?>
<books>
<book>
<id>1001</id>
<name>Thinking In Java</name>
<price>80.0</price>
</book>
<book>
<id>1004</id>
<name>Core Java aa</name>
<price>120.0</price>
</book>
<book>
<id>1002</id>
<name>Core Java</name>
<price>90.0</price>
</book>
<book>
<id>1003</id>
<name>Hello, Andriod</name>
<price>100.0</price>
</book>
</books>
解析的就是这个xml文件,不多说了。是按照csdn上的一个实例操作的。
实体类:
/**
*
*/
package parse;
/**
* @author admin
* @param mID
* @param mName
* @param mPrice
*
*/
public class Book {
private int mID;
private String mName;
private float mPrice;
public int getmID() {
return mID;
}
public void setmID(int mID) {
this.mID = mID;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public float getmPrice() {
return mPrice;
}
public void setmPrice(float mPrice) {
this.mPrice = mPrice;
}
}
解析类:
@Override
public List<Book> parse(InputStream is) throws Exception {
// TODO Auto-generated method stub
List<Book> tBooks = null;
Book tBook = null;
XmlPullParser tParse = Xml.newPullParser();
tParse.setInput(is, "UTF-8");
int tEventType = tParse.getEventType();
while (XmlPullParser.END_DOCUMENT != tEventType) {
switch(tEventType) {
case XmlPullParser.START_DOCUMENT:
tBooks = new ArrayList<Book>();
break;
case XmlPullParser.START_TAG:
if (("book").equals(tParse.getName())) {
tBook = new Book();
} elseif (("id").equals(tParse.getName())) {
tEventType = tParse.next();
tBook.setmID(Integer.parseInt(tParse.getText()));
} elseif (("name").equals(tParse.getName())) {
tEventType = tParse.next();
tBook.setmName(tParse.getText());
} elseif (("price").equals(tParse.getName())) {
tEventType = tParse.next();
tBook.setmPrice(Float.parseFloat(tParse.getText()));
}
break;
case XmlPullParser.END_TAG:
if (("book").equals(tParse.getName())) {
tBooks.add(tBook);
tBook = null;
}
break;
}
tEventType = tParse.next();
}
return tBooks;
}
主界面:
privatestaticfinal String TAG = "XML";
private BookParser mParser;
private List<Book> mBooks;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ui_main);
Button tReadBtn = (Button) findViewById(R.id.readBtn);
Button tWriteBtn = (Button) findViewById(R.id.writeBtn);
ListView tListView = (ListView)findViewById(R.id.listView);
try {
InputStream tIs = getAssets().open("books.xml");
System.out.println(tIs);
mParser = new PullBookParse();
Log.i(TAG, "mParser" + mParser);
System.out.println("mBooks" + mBooks);
mBooks = mParser.parse(tIs);
System.out.println("mBooks=" + mBooks);
//生成动态数组,加入数据
ArrayList<HashMap<String, Object>> tlistItem = new ArrayList<HashMap<String,Object>>();
for (Book tBook : mBooks) {
System.out.println("price = " + tBook.getmPrice() + "id = " + tBook.getmID() + "name = " + tBook.getmName());
Log.i(TAG, tBook.toString());
HashMap<String, Object> tMap = new HashMap<String, Object>();
tMap.put("ItemTextView1", tBook.getmID());
tMap.put("ItemTextView2", tBook.getmName());
tMap.put("ItemTextView3", tBook.getmPrice());
tlistItem.add(tMap);
}
//生成适配的 Item和动态数组对应的元素
SimpleAdapter tListItemAdapter = new SimpleAdapter(this, tlistItem,
R.layout.listview_item,
new String[]{"ItemTextView1", "ItemTextView2", "ItemTextView3"},
newint[] { R.id.textView1, R.id.textView2, R.id.textView3 });
tListView.setAdapter(tListItemAdapter);
} catch (Exception e) {
// TODO: handle exception
Log.e(TAG, e.getMessage());
}
tReadBtn.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
// TODO Auto-generated method stub
}
});
tWriteBtn.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
// TODO Auto-generated method stub
try {
System.out.println("write");
String tXml = mParser.serialize(mBooks); //序列化
FileOutputStream tFOS = openFileOutput("books.xml", Context.MODE_PRIVATE);
tFOS.write(tXml.getBytes("UTF-8"));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
});
}
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.ui_main, menu);
returntrue;
}
没什么技术含量。一点意义都没有。就这个解析,浪费了我2h。下次就不会这么多时间了。
关于屏幕适配,就不多说了,网上有太多类似的文章了,个人建议好好的实践实践。收获匪浅的。