相关疑难解决方法(0)

如何修复android.os.NetworkOnMainThreadException?

我在为RssReader运行我的Android项目时遇到错误.

码:

URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

android.os.NetworkOnMainThreadException
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

java android android-networking networkonmainthread

2308
推荐指数
40
解决办法
115万
查看次数

Looper的目的是什么以及如何使用它?

我是Android新手.我想知道Looper课程的作用以及如何使用它.我已阅读Android Looper类文档,但我无法完全理解它.我在很多地方都看过它但却无法理解它的目的.任何人都可以通过定义目的来帮助我,Looper并且如果可能的话也给出一个简单的例子吗?

multithreading android android-looper

441
推荐指数
9
解决办法
16万
查看次数

如何正确中断Android中的线程

在我的应用程序中,我有一个按钮,当单击它时,我启动一个新线程并更改按钮的文本。如果再次按下按钮,它将开始更快地更改其文本。

我想在第二次按下按钮时中断线程。正确的方法是什么?

public class TestActivity extends Activity {

 Button btn;
 int i = 0;

 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     btn = (Button)findViewById(R.id.btn);
     btn.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           runThread();
       }
     });
 }

private void runThread() {
    new Thread() {
      public void run() {
          while (i++ < 1000) {
              try {
                  runOnUiThread(new Runnable() {

                      @Override
                      public void run() {
                          btn.setText("#" + i);
                      }
                  });
                  Thread.sleep(300);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
      }
    }.start(); …
Run Code Online (Sandbox Code Playgroud)

java multithreading android

5
推荐指数
1
解决办法
8554
查看次数

Runnable运行哪个线程?

我想每100毫秒更新一次UI.在StackOverflow中搜索后,我找到了一个使用RunnableHandler这样的解决方案

final Handler handler = new Handler();
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        //update UI here

        handler.postDelayed(this, 100);
    }
};
runnable.run();
Run Code Online (Sandbox Code Playgroud)

有用!但我有一些问题:

  1. 这个Runnable运行的是哪个线程?MainThread还是其他线程?这是关于的文档postDelay 在此输入图像描述

Handler是附加MainThread,所以Runnable在MainThread 上运行?

  1. 如果Runnable在MainThread上运行,为什么需要Handler?据我所知,Handler用于在两个线程之间发送消息

java multithreading android handler runnable

5
推荐指数
1
解决办法
865
查看次数