android.os.NetworkOnMainThreadException处理方案
来源:互联网 发布:淘宝宝贝的营销词 编辑:程序博客网 时间:2024/06/06 14:21
android.os.NetworkOnMainThreadException处理方案
最近在写一个demo时遇到了这个异常android.os.NetworkOnMainThreadException,查询了一些资料才知道,
原来是android 4.0不支持在主线程中访问网络操作。于是按照网上别人说的,new一个Thread,然后发一个消息,用Handler处理
几经周折还是不行,不知道是不是自己这出了什么问题。(有人知道为什么new一个线程来处理不行吗?或者说有什么好的处理方法,求教)
最后,问题终于解决了,用了异步处理。
如下:
package com.example.android_http;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
public class MyAsync extends AsyncTask<Void, Void, Void>{
private HttpResponse response;
private HttpEntity entity;
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
// 生成一个请求对象
HttpGet httpGet = new HttpGet("http://www.baidu.com");
// 生成一个Http客户端对象
HttpClient client = new DefaultHttpClient();
InputStream inputStream = null;
try {
response = client.execute(httpGet);
entity = response.getEntity();
inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream));
String result = "";
String line = "";
while ((line = reader.readLine()) != null) {
result = result + line;
}
System.out.println(result);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
return null;
}
}
package com.example.android_http;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.request_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread() {
public void run() {
handler.sendEmptyMessage(0);
};
}.start();
}
});
}
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case 0:
MyAsync task = new MyAsync();
task.execute();
break;
}
};
};
}
- android.os.NetworkOnMainThreadException处理方案
- android.os.NetworkOnMainThreadException异常处理
- 异常处理-android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- Android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- (待处理)android.os.NetworkOnMainThreadException
- 第一章 简介
- andrid 电源管理资料收集
- 线程同步基础(二十)
- 【Oracle】Oracle 创建用户及数据表的方法
- Java中CallBack的理解
- android.os.NetworkOnMainThreadException处理方案
- [Leetcode]Balanced Binary Tree
- 使用多线程(三)
- 多线程高级话题(四)
- Android在layout xml中使用include
- Jquery 数组操作
- 【微软Windows 7操作系统提速技巧总结】
- android自定义滑动开关控件,自定义view
- Android ImageView.ScaleType的几种类别