`

Android同步网络请求工具类HttpURLConnection

阅读更多
package com.cz.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;

import android.util.Log;

public class HttpUtil {

	private static final String GET = "GET";
	private static final String POST = "POST";
	private static final int connectTimeout = 6000;
	private static final int readTimeout = 30000;

	/**
	 * GET方式发送数据
	 */
	public static String sendGet(String http, String data, String charset) {
		return request(http, data, charset, GET);
	}

	public static String sendGet(String http, HashMap<String, String> map, String charset) {
		return sendGet(http, map, charset, false);
	}

	public static String sendGet(String http, HashMap<String, String> map, String charset, boolean encode) {
		return sendGet(http, praseMap(map, charset, encode), charset);
	}

	/**
	 * POST方式发送数据
	 */
	public static String sendPost(String http, String data, String charset) {
		return request(http, data, charset, POST);
	}

	public static String sendPost(String http, HashMap<String, String> map, String charset) {
		return sendPost(http, map, charset, false);
	}

	public static String sendPost(String http, HashMap<String, String> map, String charset, boolean encode) {
		return sendPost(http, praseMap(map, charset, encode), charset);
	}

	/**
	 * 解析map
	 */
	private static String praseMap(HashMap<String, String> map, String charset, boolean encode) {
		StringBuffer sb = new StringBuffer();
		if (map != null && !map.isEmpty()) {
			try {
				boolean f = true;
				String v;
				for (String k : map.keySet()) {
					if (k != null && !"".equals(k)) {
						v = map.get(k).trim();
						if (!f)
							sb.append("&");
						if (encode)
							v = URLEncoder.encode(v, charset);
						sb.append(k).append("=").append(v);
						f = false;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return sb.toString().trim();
	}

	private static String request(String http, String data, String charset, String type) {
		StringBuffer sb = new StringBuffer();
		HttpURLConnection conn = null;
		OutputStreamWriter out = null;
		BufferedWriter bw = null;
		InputStreamReader isr = null;
		BufferedReader br = null;
		try {
			if (GET.equals(type) && data != null && !"".equals(data)){
				http = http + "?" + data;
			}
			URL u = new URL(http);
			conn = (HttpURLConnection) u.openConnection();
			conn.setRequestMethod(type);
			conn.setConnectTimeout(connectTimeout);
			conn.setReadTimeout(readTimeout);
			if (POST.equals(type))
				conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.connect();

			// 传送数据
			if (POST.equals(type)) {
				if (data != null && !"".equals(data)) {
					out = new OutputStreamWriter(conn.getOutputStream(), charset);
					bw = new BufferedWriter(out);
					bw.write(data);
					bw.flush();
				}
			}
			// 接收数据
			if (conn.getResponseCode() == 200) {
				isr = new InputStreamReader(conn.getInputStream(), charset);
				br = new BufferedReader(isr);
				String line;
				while ((line = br.readLine()) != null){
					sb.append(line).append(System.getProperty("line.separator"));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				bw.close();
			} catch (Exception e) {
			}
			try {
				out.close();
			} catch (Exception e) {
			}
			try {
				br.close();
			} catch (Exception e) {
			}
			try {
				isr.close();
			} catch (Exception e) {
			}
			try {
				conn.disconnect();
			} catch (Exception e) {
			}
		}
		Log.e("sb:", sb.toString().trim());
		return sb.toString().trim();
	}

}

 

分享到:
评论

相关推荐

    HttpURLConnection和简单的Android服务器交互

    在Android应用开发中,与服务器进行数据交互是常见的需求,HttpURLConnection是Android SDK提供的一种轻量级、低级别的网络通信接口。本主题将深入探讨如何使用HttpURLConnection进行Android与服务器的简单交互,...

    Android快速开发9个常用工具类.zip

    3. **网络请求工具类**:网络请求是Android应用与服务器交互的基础。这类工具类可能封装了`HttpURLConnection`、`OkHttp`或`Retrofit`等网络库的使用,提供异步请求、同步请求以及上传下载文件的方法。 4. **图片...

    基于Android系统Api封装常用工具类.zip

    4. **网络请求工具类**:基于Android的HttpURLConnection或者OkHttp库,封装网络请求接口,如GET、POST,支持异步和同步请求,处理JSON或XML数据,甚至可能包含缓存策略。 5. **权限管理工具类**:随着Android 6.0...

    android java 多线程下载工具类调用一个方法即可

    这个“android java 多线程下载工具类”应该是为了简化这一过程而设计的,通过调用一个方法就能实现多线程下载功能。下面我们将深入探讨多线程下载的原理以及如何在Android中实现。 1. **多线程下载原理**: - 多...

    Android跨域请求获取Java后端数据,登录界面例子

    1. **Android网络请求库的选择**:Android SDK提供了HttpURLConnection类来处理网络请求,但由于其API较为复杂,开发者通常会使用第三方库,如OkHttp、Retrofit或Volley。这些库提供了更简洁的接口,便于我们处理...

    Android http网络连接实现代码

    本示例着重讲解如何在Android中实现HTTP网络请求,包括同步请求和异步请求。 一、HTTP网络基础 HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是互联网上应用最为广泛的一种网络...

    Android网络编程之Http通信

    Android网络编程是移动应用...无论是使用Android SDK自带的HttpURLConnection还是选择一个第三方的库,了解如何正确处理网络请求、如何优化网络通信以及如何提高应用的响应性和安全性,都是移动应用开发者必备的技能。

    android常用网络框架

    传统的Android网络编程通常使用HttpURLConnection或者HttpClient,但这两者存在API复杂、易出错等问题。因此,出现了许多优秀的网络框架,如Volley、OkHttp、Retrofit等,它们简化了网络通信过程,提高了开发效率。 ...

    xcr常用的工具类

    例如,`HttpURLConnection`和`OkHttp`在Java和Android开发中广泛使用,提供便捷的网络请求功能。 4. **数据序列化与反序列化工具类**:这些工具类用于将对象转化为可存储或传输的数据格式(如JSON或XML),以及将...

    Android Studio开发显示网络图片

    在Android应用开发中,显示网络图片是一个常见的需求,特别是在构建社交、新闻或者电商类应用时。Android Studio作为官方推荐的Android开发集成环境,提供了丰富的工具和技术支持来实现这一功能。以下将详细介绍如何...

    仿QQ同步助手Android_APP源码

    6. **网络编程**:为了实现数据的云同步,开发者需要掌握HTTP协议,可能使用了Android的HttpURLConnection或者第三方库如Retrofit,来与服务器进行数据交换。 7. **JSON解析**:在与服务器交互时,数据通常以JSON...

    android 网络操作 封装 直接调用

    3. 执行网络请求:使用Call对象的enqueue()或execute()方法发起异步或同步请求。 ```java networkService.getData().enqueue(new Callback() { @Override public void onResponse(Call&lt;ResponseBody&gt; call, ...

    android网络通信

    同步请求会阻塞UI线程,可能导致应用无响应,因此在Android中通常不推荐。异步请求,如使用`AsyncTask`、`IntentService`或`Volley`、`Retrofit`等库,可以在后台线程执行,避免了阻塞UI,提高了用户体验。 Android...

    Android myFirstIntnet 安卓网络编程的登陆和查询.zip

    - 在Android中,我们通常使用HttpURLConnection或第三方库如Volley、Retrofit或OkHttp来处理网络请求。这些库提供了更高级别的抽象,简化了HTTP通信过程。 2. **Android权限**: - 实现网络功能需要在...

    Netroid框架和HttpURLConnection类的文件下载demo

    Netroid是一个轻量级的Android网络请求库,它简化了网络请求的操作,提供了异步和同步两种方式,支持HTTP和HTTPS协议。Netroid的核心特性包括: 1. **简洁API**:Netroid提供了一套易于理解和使用的API,使得开发者...

    安卓Android源码——网络监视器源码 (2).zip

    例如,HttpURLConnection是原生支持的网络连接类,可以用于GET和POST请求,而OkHttp是一个高效的网络库,提供了异步请求和响应缓存等功能。 2. **网络状态监听**:源码中可能包含BroadcastReceiver,用于监听网络...

    Android网络通信之文件断点下载事例代码

    5. **同步和进度更新**:确保多个线程安全地访问和更新文件,可能需要用到synchronized关键字或者线程同步工具如ReentrantLock。同时,需要实时更新并显示下载进度,这可以通过Handler或者LiveData等组件实现。 6. ...

    安卓Android源码——精典源码之网络通信的六种方式示例代码.zip

    1. **HttpURLConnection**:这是Android SDK内置的一种网络通信方式,基于Java的HttpURLConnection类。它可以处理HTTP请求和响应,支持HTTP/1.1协议,并且具有低功耗、低内存占用的优点。示例代码会展示如何使用...

    安卓文件下载上传解压相关-工具类支持多线程断点下载.rar

    总之,这个压缩包提供的工具类涵盖了Android应用开发中涉及文件下载、上传和解压的核心技术。开发者可以通过参考和学习这些代码,提升自己的技能,解决实际项目中的相关问题。不过需要注意的是,由于无法验证所有...

    异步加载图片(网络、本地)

    Apache HttpClient是一个强大的HTTP客户端,支持同步和异步请求,可以用于实现异步加载网络图片。它的特性包括连接池管理、重试策略、自定义请求头等功能。在Android中,虽然现在官方推荐使用OkHttp,但在某些场景下...

Global site tag (gtag.js) - Google Analytics