在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,在4.0中,访问网络不能在主程序中进行,有三个方法可以解决,一个是在主程序中增加:
//安卓2.3以后访问网络增加内容
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
第二种采用异步方式:
private class GeocodeingOnclickListener implements OnClickListener{
@Override
public void onClick(View v) {
new GeocodeingTask().execute();
}
}
private class GeocodeingTask extends AsyncTask<Integer, Integer, Integer>{
@Override
protected Integer doInBackground(Integer... params) {
String url="http://maps.googleapis.com/maps/api/geocode/json?" +
"latlng=35.95405270,117.30649970&sensor=false";
//创建一个Httpclient对象
HttpClient httpClient=new DefaultHttpClient();
String responseData="";
try {
//向指定的Http地址发送请求
HttpResponse httpResponse=httpClient.execute(new HttpPost(url));
//取得服务器返回的响应
HttpEntity httpEntity=httpResponse.getEntity();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(httpEntity.getContent()));
String line="";
while((line=bufferedReader.readLine())!=null){
responseData=responseData+line;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Gson gson=new Gson();
TestResult result=gson.fromJson(responseData, TestResult.class);
System.out.println(result.toString());
return null;
}
}
第三种采用线程的方式(与第二种类似 都是异步的方式)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 启动线程执行下载任务
new Thread(downloadRun).start();
}
/**
* 下载线程
*/
Runnable downloadRun = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
updateListView();
}
};
分享到:
相关推荐
主要介绍了Caused by: android.os.NetworkOnMainThreadException错误解决办法,本文提供了2种解决方法,需要的朋友可以参考下
文章目录android.os.NetworkOnMainThreadException问题分析查阅资料解决方案知识要点: RunOnUiThread 和 new Thread(new Runnable()).start() 的区别先说一下 RunonUiThread这时候就需要使用 handler来处理消息 ...
在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序...
Android新编译规则Android.bp文件语法规则详细介绍,条件编译的配置案例。 Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk 文件的。在 Android7.0 以前,Android 都是使用 ...
最近在Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appName-2.3.0.apk exposed beyond app through Intent.getData(),通过查找相关的资料终于找到了...
This is a development tool to show values of android.os.Build.* Try it Installing android SDK See the official android doc Create emulator The command line for creating an AVD has the following syntax...
cannot find symbol import android.os.SystemProperties 前言 最近在搞Android高版本的9和10开发,正在敲着代码唱着歌,发现在Android源码目录的app下面导入import android.os.SystemProperties这个包老是不行...
Android webview 遇到android.os.FileUriExposedException错误解决办法 1. 在 Manifest 文件中添加: <provider android:name=android.support.v4.content.FileProvider android:authorities=${...
android.util.Base64类
Apress.Pro.Android.Web.Apps.Developing.HTML5.JavaScript.CSS.and.Chrome.OS.Web.Apps
使用android.hardware.camera2写的新的自定义相机
当出现提示说: Call requires API level 9 (current min is 8): android.os.StrictMode#setThrea 也就是说版本低
android.os.build.serial 在API 9 中引入,如果低于9的系统可以通过这个方法获取这个信息值 java代码如下: public static String getDeviceSerial() { String serial = unknown; try { Class clazz = Class.for...
import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android....
问题: 在百度地图页面(Activity为singleTask)跳转到别的页面 ,离开地图页面。偶发性空指针,具体日志信息如下: 解决: 1、原本我在生命周期onStop里调用的mlocationClient.stop();...作者:Android_Mr_Zhao
为apk签android.uid.system名工具包signapk.jar,platform.x509.pem,platform.pk8
Android.rar,提供了Android 一些镜像。ramdisk-u.img Android 根分区映象。system.img Andorid 系统分区映象。