网上查了很多的资料,这个异常的大概意思是在主线程中访问网络时出的异常。 Android在4.0之前的版本是支持在主线程(MainThread)中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说在主线程中访问网络会报如题一样的错错误。
如何解决呢!
如果说在主线程中不能去访问网络的话,我们很容易就想到了在workerThread中去访问。
class WorkerThread extends Thread{
@Override
public void run() {
String resourcesXML = downloadXML("http://192.168.1.108:8088/mp3/resource.xml");
}
}
可是要怎么么把数据传回主线程呢,仔细想下就会想到一个很用用的东西handler,对了就是再通过handler将网络传回的数据放到message队列上返回给主线程的handleMessage方法。
class WorkerThread extends Thread{
@Override
public void run() {
String resourcesXML = downloadXML("http://192.168.1.108:8088/mp3/resource.xml");
Message message = handler.obtainMessage();
message.obj = resourcesXML;
handler.sendMessage(message);
}
}
在主线程中我通过一个匿名的Handler类的handleMessage去取得了我在WorkerThread中发送的消息
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == UPDATA){
new WorkerThread().start();
//用户点击了更新按钮
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
System.out.println("------->>>" + msg.obj.toString());
}
};
}
return super.onOptionsItemSelected(item);
}
这样就可以解决这个异常,从而能从网络上获取数据在主线程中使用。