Android 网络操作(上传下载等)-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

Android 网络操作(上传下载等)

简介:
+关注继续查看
package com.maidong.utils;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class InternetUtils {

	private static final String USER_AGENT = "User-Agent";

	public static String httpPost(String url, List<NameValuePair> nameValuePairs) throws ClientProtocolException, IOException {
		HttpClient httpclient = new DefaultHttpClient();
		HttpPost httpPost = new HttpPost(url);
		// List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
		// Your DATA
		// nameValuePairs.add(new BasicNameValuePair("id", "12345"));
		// nameValuePairs.add(new BasicNameValuePair("stringdata",
		// "eoeAndroid.com is Cool!"));

		httpPost.setHeader(USER_AGENT, "Mozilla/4.5");
		HttpEntity httpEntity = null;
		try {
			httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
			httpEntity = httpclient.execute(httpPost).getEntity();
		} finally {
			//httpPost.abort();
		}
		return retrieveHttpEntity(httpEntity);
	}

	public static InputStream download(URL url) throws IOException {
		URLConnection conn = url.openConnection();
		InputStream is = conn.getInputStream();
		return is;
	}

	public static byte[] downloadFileData(String surl) throws IOException {
		URL url = new URL(surl);
		URLConnection conn = url.openConnection();
		// 获取长度
		int length = (int) conn.getContentLength();
		InputStream is = conn.getInputStream();
		byte[] imgData = null;
		if (length != -1) {
			imgData = new byte[length];
			byte[] temp = new byte[512];
			int readLen = 0;
			int destPos = 0;
			while ((readLen = is.read(temp)) > 0) {
				System.arraycopy(temp, 0, imgData, destPos, readLen);
				destPos += readLen;
			}
		}
		return imgData;
	}

	public static InputStream download(String url) throws IOException {
		return download(new URL(url));
	}

	public static String httpPost(String url) throws ClientProtocolException, IOException {
		return httpPost(url, new ArrayList<NameValuePair>());
	}

	private static String retrieveHttpEntity(HttpEntity httpEntity) throws UnsupportedEncodingException, IllegalStateException,
			IOException {
		StringBuffer stringBuffer = new StringBuffer();
		InputStreamReader is = new InputStreamReader(httpEntity.getContent(), HTTP.UTF_8);
		BufferedReader bufferedReader = new BufferedReader(is);
		String line;
		while ((line = bufferedReader.readLine()) != null) {
			stringBuffer.append(line);
		}
		return stringBuffer.toString();
	}

	public static String uploadFile(String actionUrl, String newName, InputStream fStream) {
		String end = "\r\n";
		String twoHyphens = "--";
		String boundary = java.util.UUID.randomUUID().toString();
		DataOutputStream ds = null;
		try {
			URL url = new URL(actionUrl);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			/* 允许Input、Output,不使用Cache */
			con.setDoInput(true);
			con.setDoOutput(true);
			con.setUseCaches(false);
			/* 设定传送的method=POST */
			con.setRequestMethod("POST");
			/* setRequestProperty */
			con.setRequestProperty("Connection", "Keep-Alive");
			con.setRequestProperty("Charset", "UTF-8");
			con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
			/* 设定DataOutputStream */
			ds = new DataOutputStream(con.getOutputStream());
			ds.writeBytes(twoHyphens + boundary + end);
			ds.writeBytes("Content-Disposition: form-data; " + "name=\"Filedata\";filename=\"" + newName + "\"" + end);
			ds.writeBytes(end);

			/* 取得文件的FileInputStream */
			// FileInputStream fStream = new FileInputStream(uploadFile);
			/* 设定每次写入1024bytes */
			int bufferSize = 1024;
			byte[] buffer = new byte[bufferSize];

			int length = -1;
			/* 从文件读取数据到缓冲区 */
			while ((length = fStream.read(buffer)) != -1) {
				/* 将数据写入DataOutputStream中 */
				ds.write(buffer, 0, length);
			}
			ds.writeBytes(end);
			ds.writeBytes(twoHyphens + boundary + twoHyphens + end);

			ds.flush();

			/* 取得Response内容 */
			InputStream is = con.getInputStream();
			int ch;
			StringBuffer b = new StringBuffer();
			while ((ch = is.read()) != -1) {
				b.append((char) ch);
			}
			/* 将Response显示于Dialog */
			// showDialog(b.toString().trim());
			return b.toString().trim();
			/* 关闭DataOutputStream */

		} catch (Exception e) {
			// showDialog("" + e);
		} finally {
			AppUtils.close(ds);
			AppUtils.close(fStream);
		}
		return null;
	}

	/**
	 * 
	 * @param s
	 * @return null if the given string is null.
	 * @throws UnsupportedEncodingException
	 */
	public static String decode(String s, String enc) throws UnsupportedEncodingException {
		return s == null ? null : URLDecoder.decode(s, enc);
	}

	public static String encode(String s, String enc) throws UnsupportedEncodingException {
		return URLEncoder.encode((s == null ? "" : s), enc);
	}

	/**
	 * 
	 * 判断网络状态是否可用
	 * 
	 * @return true: 网络可用 ; false: 网络不可用
	 */
	public static boolean isNetworkConnected(Activity activity) {
		ConnectivityManager conManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo networkInfo = conManager.getActiveNetworkInfo();
		if (networkInfo != null) { // 这个判断一定要,要不然会出错
			return networkInfo.isAvailable();
		}
		return false;
	}
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android网络收集和ping封装库
Android网络收集和ping封装库
338 0
android 网络 post get
引用:http://blog.csdn.net/zuolongsnail/article/details/6373051 Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。
735 0
Android开发4——文件操作模式
一、基本概念 // 上下文对象 private Context context; public FileService(Context context) { super(); this.context = context; } // 保存文件方法 public void save(String filename, String fileContent) thr
773 0
Android* 操作系统上的应用程序远程调试
Android* 操作系统上的应用程序远程调试 robert-mueller-... 于 星期日, 16/02/2014 - 20:00 提交 Android* 操作系统应用程序远程调试 Android* Debug Bridge Android Debug Bridge (ADB) 是一种命令行工具,可处理主机上的调试程序(通常为 GDB* 或 DDMS*(Dalvik* 调试监测程序服务器)以及 ADT)和目标上运行的 Android* 映像之间的调试通信。
1123 0
Android官方开发文档Training系列课程中文版:网络操作之网络管理
原文地址:http://android.xsoftlab.net/training/basics/network-ops/managing.html 这节课将会学习如何对网络资源的使用情况拥有更细粒度的控制力。
597 0
Android学习之Image操作及时间日期选择器
一、基础学习 1.ImageView是图片容器,就相当于RadioGroup是RadioButton的容器一样,是View的直接子类。 1:        只需要记住图片在res/drawable-xxx下就行了。
807 0
Android官方开发文档Training系列课程中文版:网络操作之XML解析
原文地址:http://android.xsoftlab.net/training/basics/network-ops/xml.html 扩展标记语言(XML)是一系列有序编码的文档。
556 0
lua二进制操作函数
  由于 Lua 脚本语言本身不支持对数字的二进制操作(例如 与,或,非 等操作),MUSHclient 为此提供了一套专门用于二进制操作的函数,它们都定义在一个“bit”表中,使用时只要requre “bit”即可。
994 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载