产生 android.os.NetworkOnMainThreadException的原因:
一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。
解决方法:一个是使用StrictMode,二是使用线程来操作网络请求。
笔者是使用线程解决的此异常,实例如下:
String word = "";
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
lrcView.setText("");
lrcView.setText(word);
break;
}
}
};
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
Looper.prepare();//初始化当前线程
getLrcs();//定义取得歌词的方法
Looper.loop();//执行当前线程
}
}).start();
private void getLrcs() {
// TODO Auto-generated method stub
lrc search = new lrc("包容","郑源");
ArrayList result = search.fetchLyric();
word = "";
if (result.size() > 0) {
for (int i = 0; i < result.size(); i++) {
word += result.get(i);
word += "\n";
}
}
Message msg = mHandler.obtainMessage(0);
mHandler.sendMessage(msg);
}