android中的NetworkOnMainThreadException

时间:2015-03-23 17:51:04

标签: java android multithreading

我想在其他课程中执行网络操作。我在Runnable中创建了MainActivity,但我遇到了异常NetworkOnMainThreadException

我的问题是Runnable是不是从UI线程创建了另一个线程? 我是Android开发的新手。

MainActivity.java

 //Inside MainActivity Class
//.....
Runnable initStack = new Runnable(){
   @Override 
   public void run(){
      otherClassObject.itsMethod();
      handler.post(new Runnable(){
             //back to UI thread.... 
    });
  }
}

4 个答案:

答案 0 :(得分:2)

  

我的问题是Runnable是不是从UI线程创建了另一个线程?

没有。 Runnable不是Thread。如果您需要Thread,请使用Thread,或使用其他使用Thread的内容(例如AsyncTask)。

答案 1 :(得分:2)

您需要创建一个新的线程,而不仅仅是一个可运行的线程。不要致电initStack.run(),而是执行以下操作:new Thread(initStack).start();

答案 2 :(得分:1)

可能重复:NetworkOnMainThreadException on Runnable

根据java文档,“应由任何其实例打算由线程执行的类实现。”

简而言之,Android对主线程上的网络相关线程的处理做了一些更改。它由AsyncTask完成。

在这里阅读: http://developer.android.com/reference/android/os/AsyncTask.html

此外,如果您在对实际编码部分进行信任跳跃之前先阅读Android编程和一些教程的基础知识,那会更好。

答案 3 :(得分:0)

将您的代码更改为。 Runnable不会创建线程。 Runnable是简单的三线接口。

new Thread() {
            @Override
           public void run() {
               //your code here
           }
       }.start();