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 成长之路
  • 相关阅读:
    C++——string转char[]
    Ackerman的非递归算法(未解决)
    单链表——递归求最大整数、节点个数、平均值
    队列——以数组Q[m]存放循环队列元素,设置一个标志tag,以tag=0和tag=1来区别在头指针和尾指针相等时,队列为空或满
    队列——假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意:不设头指针), * 试编写相应的置空队列、判断队列是否为空、入队和出队等算法。
    栈——判断回文
    栈——表达式求值
    栈——匹配()[]
    栈——十进制转八进制
    动态获取导航栏
  • 原文地址:https://www.cnblogs.com/liende/p/3303454.html
Copyright © 2011-2022 走看看