如何修复“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()
}
GeekTip: Don’t forget to add:
in your projects manifest file!
方法 #2:覆盖默认方法
几乎所有的网络操作都应该在线程中或作为异步任务执行。但是,如果您愿意接受处罚,您可以取消此限制并覆盖默认行为。
Java
StrictMode.ThreadPolicy gfgPolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(gfgPolicy);
Consequences:
Your app will become unresponsive and lock up (in locations with patchy internet connection), the user will sense slowness and will have to forcibly quit the program, and you risk the activity management deleting your app and informing the user that it has stopped.
方法#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文件来改变线程。
Reference Article: How Does Threading Work in Android?
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()
}
就像添加这些简单的代码片段可以帮助你永远摆脱这个错误一样,你又回到了那个重要的项目上!