主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException...

 

1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException

new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
					updateFile = Environment.getExternalStorageDirectory()
							+ "/3530.jpg";
					//downloadUpdateFile("http://image.anzimall.com/3530/3530_K21D_app_V2.3_2015050528.bin",  updateFile);
					downloadUpdateFile("http://img1.cache.netease.com/catchpic/F/FC/FCC085159B92C5EE4FDDB9618166051E.jpg",  updateFile);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();  //android.os.NetworkOnMainThreadException
					System.out.println(e.toString()+"");
				}
			}
		}).start();

2.抛出异常之后一定要打印异常,看看异常的具体信息。System.out.println(e.toString()+"");

public static long downloadUpdateFile(String down_url, String file)
			throws Exception {

		int downloadCount = 0;// 已经下载好的大小

		InputStream inputStream;
		OutputStream outputStream;
		URL url = new URL(down_url);
		HttpURLConnection httpurlconnection = (HttpURLConnection) url
				.openConnection();
		httpurlconnection.setConnectTimeout(5000);
		httpurlconnection.setReadTimeout(5000);
		// 获取下载文件的size
		//totalSize = httpURLConnection.getContentLength();

		if (httpurlconnection.getResponseCode() == 404) {
			throw new Exception("fail!");
			// 这个地方应该加一个下载失败的处理,但是,因为我们在外面加了一个try---catch,已经处理了Exception,
			// 所以不用处理
		}

		inputStream = httpurlconnection.getInputStream();
                File file_ok = new File(file);
		outputStream = new FileOutputStream(file_ok);// 文件存在则覆盖掉

		byte buffer[] = new byte[1024];
		int readsize = 0;

		while ((readsize = inputStream.read(buffer)) != -1) {
			outputStream.write(buffer, 0, readsize);
			downloadCount += readsize;// 时时获取下载到的大小
		}
		if (httpurlconnection != null) {
			httpurlconnection.disconnect();
		}
		inputStream.close();
		outputStream.close();

		return downloadCount;
	}

  

 

转载于:https://www.cnblogs.com/childhooding/p/4664762.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值