相关疑难解决方法(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万
查看次数

使用Android下载文件,并在ProgressDialog中显示进度

我正在尝试编写一个更新的简单应用程序.为此,我需要一个简单的功能,可以下载一个文件,并显示当前进度ProgressDialog.我知道怎么做ProgressDialog,但我不知道如何显示当前进度以及如何首先下载文件.

java android download android-asynctask

1017
推荐指数
11
解决办法
52万
查看次数

在Android中获取"上下文"的静态方法?

有没有办法Context在静态方法中获取当前实例?

我正在寻找那种方式,因为我讨厌每次更改时保存"Context"实例.

android android-context

931
推荐指数
15
解决办法
65万
查看次数

同时运行多个AsyncTasks - 不可能?

我正在尝试同时运行两个AsyncTasks.(平台是Android 1.5,HTC Hero.)但是,只有第一个被执行.这是一个描述我的问题的简单片段:

public class AndroidJunk extends Activity {
 class PrinterTask extends AsyncTask<String, Void, Void> {
     protected Void doInBackground(String ... x) {
      while (true) {
       System.out.println(x[0]);
       try {
        Thread.sleep(1000);
       } catch (InterruptedException ie) {
        ie.printStackTrace();
       }
      }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new PrinterTask().execute("bar bar bar");
        new PrinterTask().execute("foo foo foo");

        System.out.println("onCreate() is done.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我期望的输出是:

onCreate() is done.
bar bar bar
foo foo foo
bar bar bar
foo foo foo
Run Code Online (Sandbox Code Playgroud)

等等.但是,我得到的是:

onCreate() is done. …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-asynctask

249
推荐指数
4
解决办法
17万
查看次数

如何使用Java直接从Internet读取文本文件?

我试图从在线文本文件中读取一些单词.

我尝试过做这样的事情

File file = new File("http://www.puzzlers.org/pub/wordlists/pocket.txt");
Scanner scan = new Scanner(file);
Run Code Online (Sandbox Code Playgroud)

但它没有用,我得到了

http://www.puzzlers.org/pub/wordlists/pocket.txt 
Run Code Online (Sandbox Code Playgroud)

作为输出,我只想得到所有的话.

我知道他们在当天教我这个,但我现在不记得到底是怎么做的,非常感谢任何帮助.

java file text-files java.util.scanner

41
推荐指数
4
解决办法
12万
查看次数

AsyncTask 作为 kotlin 协程

AsyncTask 的典型用途:我想在另一个线程中运行一个任务,在该任务完成后,我想在我的 UI 线程中执行一些操作,即隐藏进度条。

任务将开始,TextureView.SurfaceTextureListener.onSurfaceTextureAvailable完成后我想隐藏进度条。同步执行此操作不起作用,因为它会阻止构建 UI 的线程,使屏幕变黑,甚至不显示我之后想隐藏的进度条。

到目前为止,我使用这个:

inner class MyTask : AsyncTask<ProgressBar, Void, ProgressBar>() {
    override fun doInBackground(vararg params: ProgressBar?) : ProgressBar {
        // do async
        return params[0]!!
    }

    override fun onPostExecute(result: ProgressBar?) {
        super.onPostExecute(result)
        result?.visibility = View.GONE
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这些课程非常丑陋,所以我想摆脱它们。我想用 kotlin 协程来做到这一点。我尝试了一些变体,但它们似乎都不起作用。我最有可能怀疑的工作是这样的:

runBlocking {
        // do async
}
progressBar.visibility = View.GONE
Run Code Online (Sandbox Code Playgroud)

但这不能正常工作。据我了解,它runBlocking不会像那样启动一个新线程AsyncTask,这正是我需要它做的。但是使用thread协程,我没有看到在完成时得到通知的合理方法。另外,我也不能放入progressBar.visibility = View.GONE新线程,因为只有UI线程才允许进行此类操作。

我是协程的新手,所以我不太明白我在这里缺少什么。

multithreading android android-asynctask kotlin kotlin-coroutines

12
推荐指数
3
解决办法
1万
查看次数

android中片段的事务导致空白屏幕

如果它有帮助,我想要的东西与谷歌教程中的内容类似

但是在转换之前会创建一个片段.如果我这样做,过渡工作正常; 但我不能用这种方法

=====

针对API 7+,我只想在整个屏幕中看到一个片段,并使用一个按钮(一个带有onTouch事件的绘制按钮),然后交替使用第二个片段,反之亦然.

但是当我用第二个片段替换第一个片段时,或者如果我使用fragmentTransaction.show和fragmentTransaction.hide,我得到一个空白屏幕; 在我得到空白屏幕之前,我可以切换两次.我不想在后台上.

我在MainActivity的onCreate中创建片段:

DiceTable diceTable = new DiceTable();
Logger logger = new Logger();
fragmentTransaction.add(diceTable, DICETABLE_TAG);
fragmentTransaction.add(logger, LOGGER_TAG);
fragmentTransaction.add(R.id.fragment_container, logger);
fragmentTransaction.add(R.id.fragment_container, diceTable);
Run Code Online (Sandbox Code Playgroud)

然后在一个方法(从片段调用)我做切换:

    Logger logger = (Logger)fragmentManager.findFragmentByTag(LOGGER_TAG);
    DiceTable diceTable = (DiceTable)fragmentManager.findFragmentByTag(DICETABLE_TAG);

    if (diceTable.isVisible()) {
        fragmentTransaction.replace(R.id.fragment_container, logger);

        fragmentTransaction.commit();
        fragmentTransaction.hide(diceTable);
        fragmentTransaction.show(logger);
    }
    else if (logger.isVisible()) {
        fragmentTransaction.replace(R.id.fragment_container, diceTable);

        fragmentTransaction.commit();
        fragmentTransaction.hide(logger);
        fragmentTransaction.show(diceTable);
    }
Run Code Online (Sandbox Code Playgroud)

这不是我应该怎么做的?

更换碎片时出现空白屏幕

android android-layout android-fragments

7
推荐指数
1
解决办法
1万
查看次数

Android 异步任务已弃用。需要替代示例

我是 Android Java 的新手,我真的很感激我可以得到一些参考和/或示例,以便在不使用 AsyncTask 的情况下进行一些简单的网络调用。

我正在制作一个程序来从 URL 解析一个简单的 JSON 对象。

在 Android 11 (API 30) 中,所有 AsyncTask 都将被弃用,如下所示:

https://developer.android.com/reference/android/os/AsyncTask

java networking android json

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

AsyncTask现在是否已弃用AsyncTaskLoader?

因为AsyncTaskLoader一切都AsyncTask可以做到,并且还具有内置的最佳实践功能,例如线程复制和预先成熟的死亡预防.

有没有理由再使用AsyncTask了?或者我应该盲目地AsyncTaskLoader随处使用

android

4
推荐指数
3
解决办法
2204
查看次数

Kotlin 协程会取代 AsyncTask 吗?

AsyncTask需要吗?

在使用 Java 的 Android 中,我们曾经实现了 and AsyncTaskAsyncTaskLoader但最近我开始学习 Kotlin,我注意到类似的事情是由 Kotlin 协程完成的。

android android-asynctask kotlin kotlin-coroutines

3
推荐指数
1
解决办法
799
查看次数