zoukankan      html  css  js  c++  java
  • android:从互联网上下载txt文件时出现NetworkOnMainThreadException的解决方法

    解决方法1:在Activity的onCreate()方法中加入如下代码:

    	    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());  
    	    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
           .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()          .build());  
    

     解决方法2:  在AndroidManifest.xml文件中加入如下标记:
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    本来这个标记开是的时候就是加了,但是就是没用,后来试着把 <uses-sdk
            android:minSdkVersion="4"/>这段标记加在上面两个标记前面就可以了。原先没该之前uses-sdk标记是这样的:    <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />

    附加一份从互联网上下在txt文件的方法(该方法返回String字符串)

    private URL url=null;
    	public String download(String urlString)
    	{
    		StringBuffer sbBuffer=new  StringBuffer();
    		String line=null;
    		BufferedReader buffer=null;
    		try
    		{
    			 System.out.println("错");
    			//创建一个URL对象
    		   url=new URL(urlString);
    		   //创建一个Http连接
    		   HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();
    		   System.out.println("创建连接成功");
    		   //使用IO流读取数据
    		   buffer=new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"GB2312"));
    		 //  buffer=new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
    		   System.out.println("使用IO流读取数据成功");
    		   while ((line = buffer.readLine()) != null) {
    			   sbBuffer.append(line);
    			   
    			}
    		   System.out.println("唔错");
    		} catch (Exception e)
    		{
    			// TODO: handle exception
    		//	System.out.println(e.getMessage());
    		//	e.
    			e.printStackTrace();
    			StackTraceElement[] stElements=e.getStackTrace();
    			for (StackTraceElement stackTraceElement : stElements)
    			{
    		
    				String exclass = stackTraceElement.getClassName();
    				String method = stackTraceElement.getMethodName();
    				System.out.println(":" + "[类:" + exclass + "]调用"
    				+ method + "时在第" + stackTraceElement.getLineNumber()
    				+ "行代码处发生异常!异常类型:" + e.getClass().getName());
    			}
    		}
    		finally
    		{
    			try
    			{
    				buffer.close();
    			} catch (Exception e2)
    			{
    				// TODO: handle exception
    			//	System.out.println();
    				e2.printStackTrace();
    			}
    			
    			
    		}
    		return sbBuffer.toString();
    	}
    
    Android 成长之路
  • 相关阅读:
    Android Push Notification实现信息推送使用
    java动态编译
    Directx11教程(56) 建立一个skydome
    Directx11教程(51) 简单的billboard
    Directx11教程(52) 实例(instancing)的简单应用
    Directx11教程(50) 输出depth/stencil buffer的内容
    Directx11教程(54) 简单的基于GS的billboard实现
    Directx11教程(57) 环境映射
    Directx11教程(59) tessellation学习(1)
    Directx11教程(20) 一个简单的水面
  • 原文地址:https://www.cnblogs.com/liende/p/3303454.html
Copyright © 2011-2022 走看看