今天在写了一个android小程序,结果在我的虚拟机中运行得好好的,结果下到平板中,居然运行出错,显示:

android.os.NetworkOnMainThreadException

后来,百度了一下,发现原来是我建的工程是android 2.3的, 而我的平板是android4.0的,所以会出现上述错误!

正确解决方法:

在 public void onCreate(Bundle savedInstanceState) {}

中加入

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()      
        .detectDiskReads()      
        .detectDiskWrites()      
        .detectNetwork()   // or .detectAll() for all detectable problems      
        .penaltyLog()      
        .build());      
     StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()      
        .detectLeakedSqlLiteObjects()   
        .penaltyLog()      
        .penaltyDeath()      
        .build());
 

即上述变为:

public void onCreate(Bundle savedInstanceState)
    { 
     /*
      * 以下一段为android3.0以上版本使用,具体为什么,我也不懂
      */
     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()      
        .detectDiskReads()      
        .detectDiskWrites()      
        .detectNetwork()   // or .detectAll() for all detectable problems      
        .penaltyLog()      
        .build());      
     StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()      
        .detectLeakedSqlLiteObjects()   
        .penaltyLog()      
        .penaltyDeath()      
        .build());
 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);   

       .......
}

然后,加入时肯定会报错的,因为没有引入头文件,引入头文件后,保存代码。

问题又来了,保存时没错,但是我点运行时,程序又报错了,说我源文件代码有错,接着在

public void onCreate(Bundle savedInstanceState)
    { 
     /*
      * 以下一段为android3.0以上版本使用,具体为什么,我也不懂
      */
     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()      
        .detectDiskReads()      
        .detectDiskWrites()      
        .detectNetwork()   // or .detectAll() for all detectable problems      
        .penaltyLog()      
        .build());      
     StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()      
        .detectLeakedSqlLiteObjects()   
        .penaltyLog()      
        .penaltyDeath()      
        .build());
 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);   

       .......
}

上加入 @SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi", "NewApi" })后,

@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi", "NewApi" })

public void onCreate(Bundle savedInstanceState)
    { 
     /*
      * 以下一段为android3.0以上版本使用,具体为什么,我也不懂
      */
     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()      
        .detectDiskReads()      
        .detectDiskWrites()      
        .detectNetwork()   // or .detectAll() for all detectable problems      
        .penaltyLog()      
        .build());      
     StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()      
        .detectLeakedSqlLiteObjects()   
        .penaltyLog()      
        .penaltyDeath()      
        .build());
 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);   

       .......
}

 

程序终于OK了

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐