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 成长之路
原文地址:https://www.cnblogs.com/liende/p/3303454.html