原因:不能在主线程中使用网络请求
package com.wu.xml;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import java.io.StringReader;
import javax.xml.parsers.SAXParserFactory;
import util.HttpDownload;
public class MainActivity extends Activity {
private Button parseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//4.0系统专用,避免在Activity中使用HTTP请求时报错
//StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
//StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
parseButton = (Button)findViewById(R.id.parse);
parseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(runnable).start();
}
});
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
//可以加入bundle数据
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {
HttpDownload hd = new HttpDownload();
String resultStr = hd.download("http://192.168.1.103:8080/build.xml");
System.out.println(resultStr);
try{
//创建一个SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader reader = factory.newSAXParser().getXMLReader();
//为xml设置内容处理器
reader.setContentHandler(new MyContentHandler());
reader.parse(new InputSource(new StringReader(resultStr)));
}catch (Exception e){
e.printStackTrace();
}
//Message msg = new Message();
//msg.arg1=0;
//Bundle bundle = new Bundle();
//msg.setData(bundle);
//handler.sendMessage(msg);
}
};
}