当前位置: 首页 > 知识库问答 >
问题:

错误StrictMode$AndroidBlockGuardPolicy。网络[副本]

羊冠玉
2023-03-14

我创建了android应用程序,并使用JSON从服务器获取数据,但出现了如下错误:

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)

我怎样才能解决这个问题谢谢

共有3个答案

麻桐
2023-03-14

只需在创建方法后添加两行

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
禹昆
2023-03-14

最好使用这里提到的异步任务(AsyncTask),另一种方法是使用:

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

或这个:

Thread thread = new Thread(new Runnable(){
@Override
public void run() {
    try {
        //Your code goes here
    } catch (Exception e) {
       Log.e(TAG, e.getMessage());
    }
}
});
thread.start();

在发生异常的活动中。

艾成益
2023-03-14

您必须在MainActivity类上插入两行“StrictMode”,示例如下:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        
        try {
            // JSON here
        } catch (JSONException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        setContentView(R.layout.activity_main);
        Intent intent=new Intent(this,HomeActivity.class);
        startActivity(intent);
    }
}

埃伊。沙功

编辑:这个答案“解决了”这个“问题”,但它并没有真正解释它,这是重要的部分。

修改StrictMode不是一个解决方案。此外,这个异常实际上并不是程序逻辑中的错误。程序范例中的错误和异常告诉你

您不应该在主线程上执行超文本传输协议调用,因为这会导致UI冻结。正如其他一些答案所建议的,您应该将超文本传输协议调用交给AsyncTask类。

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

更改StrictMode实际上只是告诉应用程序-不要提醒我写了糟糕的代码。它可以用于调试,或者在某些情况下,您知道自己在做什么,但通常情况下,这不是一种方法。

 类似资料:
  • 问题内容: 我创建了一个android应用程序,并使用从服务器获取数据,但显示以下错误: 我该如何解决此问题, 谢谢 问题答案: 您必须在MainActivity类上插入两行“ StrictMode”,示例如下: 艾克·萨康

  • 当我在Android 2.3.6上运行这段代码时,它运行得很好。在4.0上,我得到一个StrictMode异常。从一些问题来看,似乎你不能在UI线程上进行网络操作。但我没有在UI线程上执行任何UI操作。 我是直接调用dobackground而不是执行,因为我需要检查dobackground的返回值。我想下面应该有效。 我错过了什么? 编辑:手机上未启用严格模式。

  • 问题内容: 在过去的两个月中,我在Chrome的开发人员控制台上收到以下错误: 症状: 页面未加载。 截断的CSS和JS文件。 页面挂起。 服务器环境: 阿帕奇2.2.22 的PHP 的Ubuntu 这是在我们内部的Apache服务器上发生的。其他人都没有发生这种情况-即 我们的用户都没有遇到此问题-开发团队中的其他人也没有。 其他人正在使用完全相同的Chrome版本访问完全相同的服务器。我还尝试

  • 问题内容: 这是我第一次使用axios,遇到错误。 使用正确的url和参数,当我检查网络请求时,确实可以从服务器中获得正确的答案,但是当我打开控制台时,我看到它没有调用回调,而是捕获了错误。 错误:网络错误堆栈跟踪:createError @ http:// localhost:3000 / static / js / bundle.js:2188:15 handleError @ http://

  • 我正在尝试从macos上使用swift开发的应用程序连接到realm object server 当我尝试连接时,会出现“网络连接丢失”错误,但我可以从浏览器中毫无问题地打开领域服务器。。顺便说一句,这个问题最近发生了,它在几周前工作正常 这里,用户总是,错误描述是 这发生在本地服务器和一个托管在数字海洋 服务器版本1.8。3. xcode控制台日志 2018-01-15 12:46:07.077

  • 为4.4 ti升级内核构建时,我收到一个网络接口错误。所有层都在morty分支中。该图像是核心图像极小值。 正在配置网络接口…ifup:未知地址类型“inet” 具有以下配置: 使用图层部分: 内核输出: 我有互联网使用非元ti层工作。任何提示建议都非常感谢。奥克