📌  相关文章
📜  如何修复“android.os.NetworkOnMainThreadException”?

📅  最后修改于: 2022-05-13 01:58:45.168000             🧑  作者: Mango

如何修复“android.os.NetworkOnMainThreadException”?

在 Android Studio 中处理一些严肃的项目时,您可能碰巧在上述行中遇到了这个令人讨厌的错误,并且所有的世界都试图撕裂。好吧,这篇文章有一个完美的解决方案来解决这个“android.os.NetworkOnMainThreadException”错误!阅读以修复它!

方法#1:异步任务方式

信不信由你,但是当程序尝试在其主线程上执行网络活动时,会引发此异常。使用AsyncTask运行您的代码。采用异步任务后,您可以调用以下方法来运行您的任务。

Java
new RetriveDSAConcepts().execute(GeeksforGeeks);


Java
StrictMode.ThreadPolicy gfgPolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(gfgPolicy);


Java
if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy gfgPolicy = 
        new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(gfgPolicy);
}


Java
Thread gfgThread = new Thread(new Runnable() {
    @Override
    public void run() {
        try  {
            // Your network activity
           // code comes here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});
  
gfgThread.start();


Java
// GeeksforGeeks
private void gfg()
{
    fetchData();
    // Add code which needs to 
    // be done in the background.
}
  
@Background
// This goes in the Background
protected void fechData()
}


方法 #2:覆盖默认方法

几乎所有的网络操作都应该在线程中或作为异步任务执行。但是,如果您愿意接受处罚,您可以取消此限制并覆盖默认行为。

Java

StrictMode.ThreadPolicy gfgPolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(gfgPolicy);

方法#3:禁用严格模式

我们都知道 Android 中的严格模式是什么,如果您无法完成任务,那么您可以尝试在您的应用程序中禁用严格模式。要绕过它,只需继续并将其添加到您的 NetworkActivity。Java

Java

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy gfgPolicy = 
        new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(gfgPolicy);
}

方法#4:手动更改工作线程

如果以上方法都不行,可以手动将网络任务改为侧线程,然后等待结果再包含在主线程中,这样用户就不会觉得呆滞了。将下面的代码添加到您的NetworkActivity。 Java文件来改变线程。

Java

Thread gfgThread = new Thread(new Runnable() {
    @Override
    public void run() {
        try  {
            // Your network activity
           // code comes here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});
  
gfgThread.start();

方法 #5:使用 Android 注释

您也可以使用 Android Annotations 来修复此错误并重新开始,只需将以下代码添加到您的Java文件中,然后查看事情的进展!

Java

// GeeksforGeeks
private void gfg()
{
    fetchData();
    // Add code which needs to 
    // be done in the background.
}
  
@Background
// This goes in the Background
protected void fechData()
}

就像添加这些简单的代码片段可以帮助你永远摆脱这个错误一样,你又回到了那个重要的项目上!