安卓问题总结( android.os.NetworkOnMainThreadException异常)

问题描述:

android.os.NetworkOnMainThreadException异常(不要在主线程访问网络资源)

问题分析:

造成这种异常的原因是安卓版本问题(仔细研究错误原因是代码不符合Android规范),网上搜索发现:android3.0版本开始(具体是不是从这个版本开始的,就不深究咯)就强制程序不能在主线程中访问网络,要把访问网络放在独立的线程中。

解决方式:

1、想要忽略这些强制策略问题的话,可以在onCreate()方法里面加上

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()

.penaltyLog().penaltyDeath().build());

2、放在单独的线程中:(我用的是点击按钮查看网络图片,学习用)

private Bitmap bitmap = null;//全局变量 (我如果放在局部变量中,会提示:不可变的局部变量不能被赋值,懒省事就放到全局变量中咯)

按钮监听器:

private final class ButtonListenerEvent implements OnClickListener{
@Override
public void onClick(View v) {
    final String path = imagePath.getText().toString();
    final Handler handler = new Handler(){
    public void handleMessage(Message msg){
        switch (msg.what) {
        case 0:
            imageView.setImageBitmap(bitmap);
            break;
        default:
            break;
        }
    }
};
new Thread(){
    public void run(){
    try {
        byte[] data = ImageService.getImage(path);
        // 设置图像的位图
        bitmap = BitmapFactory.decodeByteArray(data, 0,
        data.length);
        //处理完发送一个空消息
        handler.sendEmptyMessage(0);
    } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), R.string.error, 1)
            .show();
            }
        }
    }.start();
    }
}

我是安卓新手,如果有不对的地方还请大家多多指导~

时间: 2025-01-07 16:11:19

安卓问题总结( android.os.NetworkOnMainThreadException异常)的相关文章

安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)

安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04|  分类: 技术 |  标签:安卓  技术  java  |举报|字号 订阅 在android 2.3上访问网络的方法,在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,主要问题在于4.0中访问网络不能在主线程中进行,有两个方法可以解决.第一种是在主线程中增加如下代码[不推荐]: // 详见

android之android.os.NetworkOnMainThreadException异常

使用android测试访问web服务器的webservice时,在MainActivity的主线程中访问webservice,代码如下: package com.example.myandroidpro; import java.io.File; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationE

Android Eclipse工程开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决办法

android.os.NetworkOnMainThreadException 异常的解决办法, 刚开是把HttpURLConnectionnection 打开连接这个方法放在UI线程里了,可能不是线程安全的,而且这个方法请求是需要等待的,所以就抛出了这个异常,后来用子线程打开的HttpURLConnection, 一切就都正常了,只要在主线程里开启子线程就行了.子线程利用URL 问题解决.下面贴一段代码 String file1 = SERVER_PATH; URL url = new URL

android.os.NetworkOnMainThreadException异常

最近好忙啊,准备完比赛的东西就准备驾考,终于可以稍微歇息下了,好久没写了.今天解决了一个对之前的我来说是一个很大的问题,好开心呀!! 之前项目开发是用2.3开发 测试手机是android4.4时候提示 android.os.NetworkOnMainThreadException异常 第一次看到这异常,字面意思是说:在主线程中的网络异常.然后我就去了解了下这个异常,先看看官方的说明: public class NetworkOnMainThreadException extends Runtim

Android加载网络图片报android.os.NetworkOnMainThreadException异常

Android加载网络图片大致可以分为两种,低版本的和高版本的.低版本比如4.0一下或者更低版本的API直接利用Http就能实现了: 1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="

Android之android.os.NetworkOnMainThreadException异常解决

最近一直在做即时通讯,刚开始遇到一个问题,log打印出来的就是android.os.NetworkOnMainThreadException,大概的意思就是在主线程操作网络,以前都没注意过这个问题,也是第一次遇到!以前都是用AsyncTask,简单,快捷,还可以直接操作UI,我就是一个找虐的人,这次偏不这么做了,直接用handler,于是乎就遇到了这个问题. Android 4.0以后不允许网络操作在主线程中进行,那就用异步方法来操作 简单贴一下代码: new Thread(new Runnab

android.os.NetworkOnMainThreadException异常 (转)

转:http://blog.csdn.net/wotoumingzxy/article/details/7797295 这个异常大概意思是在主线程访问网络时出的异常. Android在4.0之前的版本 支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了. 那么如何做才能正常运行呢? 请看这里: 例如:  从网络中获取一个Url地址. url = AuthUtil.getAuthorizationURL(); if (url == null)

android网络访问异常:android.os.NetworkOnMainThreadException

Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java) at java.net.InetAddress.lookupHostByName(InetAddress.java:388) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:23

Android 异常 android.os.NetworkOnMainThreadException

最近在实现一个Android下的数据采集的SDK,收集用户使用数据使用HTTP发送到云平台,进行数据分析.但在发送数据时报如下错误: Caused by: android.os.NetworkOnMainThreadException 产生的原因,官方解释: Class Overview The exception that is thrown when an application attempts to perform a networking operation on its main t