`
bbwang8088
  • 浏览: 45716 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在Activity中启动一个网络连接遇到android.os.NetworkOnMainThreadException

阅读更多

     真是问题不断,在Android3.1平台上开发时,通过自定义Application类,在其中的onCreate方法中初始化了一个网络连接,可恶的是发生了android.os.NetworkOnMainThreadException 的错误。

     借助网络的力量,得知在3.0平台上由于对网络的限制比较严格,无法之间初期。不得不在网络初期之前加了一段代码。

         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()   // or .detectAll() for all detectable problems
                 .penaltyLog()
                 .build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()
                 .detectLeakedClosableObjects()
                 .penaltyLog()
                 .penaltyDeath()
                 .build());
     super.onCreate();
     //.....初始化网络连接

 

详细说明,参考http://android.yyable.com/reference/android/os/StrictMode.html

 

分享到:
评论
1 楼 yaoneng 2012-07-10  
这个不用UI主线程来访问,我用了一个异步线程来做网络访问,就不会报这个错了

相关推荐

    Caused by: android.os.NetworkOnMainThreadException错误解决办法

    在Android开发中,`Caused by: android.os.NetworkOnMainThreadException` 是一个常见的错误,它意味着开发者尝试在主线程(UI线程)中执行网络操作,这是被禁止的。自Android 4.0 (API Level 14)以后,为了保证用户...

    多线程技术在Android手机开发中的运用.pdf

    通常,Android程序默认在一个主线程(UI线程)中运行,如果一个任务执行时间过长,会导致主线程阻塞,使得用户界面无响应,影响程序的流畅性。为了解决这个问题,开发者需要采用多线程技术。 多线程允许程序同时...

    android里如何在子线程中如何更新主线程的控件

    这意味着,如果你在子线程中尝试修改任何UI元素,如文本、图片或者布局,系统会抛出`android.os.NetworkOnMainThreadException`异常,提示你在子线程中进行了网络操作或者UI更新。因此,要在子线程中更新主线程的...

    Android应用源码之alertDialog.zip

    在Android开发中,`AlertDialog`是一个非常重要的组件,它用于显示一些警告、确认或提示性的信息给用户。这个`alertDialog.zip`文件很可能是包含了某个Android应用中关于`AlertDialog`使用的源码示例,供开发者学习...

    Android应用源码之HandlerLooper2.zip

    例如,当一个服务或者后台线程需要更新UI时,它可以通过`Handler`将更新操作的消息发送到UI线程,确保不会抛出`android.os.NetworkOnMainThreadException`等异常。 7. **生命周期管理**: 当不再需要使用`Handler`...

    ndroid异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    任何对UI的操作都必须在这个线程中进行,否则会抛出`android.os.NetworkOnMainThreadException`等异常。因此,当需要执行网络请求、数据库操作或大计算量的任务时,我们需要在其他线程(非UI线程)中执行。 接着,...

    17.Handler消息传递机制

    但这里有一个问题,Android不允许在非主线程中直接修改UI,因此这段代码会抛出`android.os.NetworkOnMainThreadException`异常,导致程序崩溃。 正确的做法是使用Handler来处理子线程与主线程的通信。Handler通常...

    动态添加view

    本文将详细讲解如何在Android中实现动态添加View,并通过一个名为`DynamicAddViewDemo`的示例项目进行说明。 一、动态添加View的基本原理 在Android中,我们通常使用XML来定义布局,但在某些场景下,如创建可变数量...

    动态刷新界面

    如果在其他线程中修改UI元素,会抛出`android.os.NetworkOnMainThreadException`异常。因此,我们需要使用异步处理或者Handler、Runnable、AsyncTask等工具来处理后台任务,然后在主线程中更新UI。 1. **Handler和...

    android使用videoview播放视频

    - 在处理用户交互(如点击按钮)时,通常需要在UI线程中进行,否则可能会抛出`android.os.NetworkOnMainThreadException`异常。 - 如果需要在视频播放完成后执行某些操作,可以监听`OnCompletionListener`事件。 ...

    Android实现TCP客户端支持读写操作

    本篇文章将指导你如何在Android应用中创建一个TCP客户端,并在UI线程与工作线程之间安全地进行数据交互。 首先,由于Android系统规定,网络操作不能在主线程(UI线程)中执行,否则会触发`...

    android使用AsyncTask实现多线程下载实例

    3. 使用`AsyncTask`更新UI时,确保操作是在主线程进行的,否则会抛出`android.os.NetworkOnMainThreadException`异常。 总之,`AsyncTask`在实现简单、快速的多线程任务时非常方便,但需注意其生命周期和资源管理,...

    FLJ_web__JJXF.rar_Java_

    5. **LiveData和ViewModel**(Android架构组件):LiveData是一个观察者模式的实现,它可以自动在正确的线程中更新观察者,而ViewModel则负责在Activity重建时保持数据。这两者结合,可在非UI线程中处理数据,然后...

    使用AsyncTask的异步任务

    - 避免在`doInBackground()`中直接操作UI,否则会抛出`android.os.NetworkOnMainThreadException`。 - `AsyncTask`不是线程安全的,不推荐在多个实例之间共享。 6. **替代方案** 虽然`AsyncTask`简单易用,但在...

Global site tag (gtag.js) - Google Analytics