package com.bawei.zhaoliang.net;
import android.os.AsyncTask;
import android.text.TextUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* 网络工具类
* 需求:提供get方法获取数据
* 思路:
* 1. HTTPURLConnection/HttpClient
* 2. 异步任务 AsyncTask/线程
* 3. 数据响应 接口回调
*
* @author zhaoliang
* @version 1.0
* @create 2018/6/27
*/
public class HttpUtils {
private static final HttpUtils ourInstance = new HttpUtils();
public static HttpUtils getInstance() {
return ourInstance;
}
private HttpUtils() {
}
/**
* get 请求
*
* @param url 请求地址
* @param callback 回调
*/
public void getRequst(String url, NetCallback callback) {
new LoadDataTask(callback).execute(url);
}
/**
* 异步请求网络
*/
class LoadDataTask extends AsyncTask<String, Void, String> {
private NetCallback callback;
public LoadDataTask(NetCallback callback) {
this.callback = callback;
}
@Override
protected String doInBackground(String... strings) {
// 使用HTTPURLConnection请求网络
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 判断响应吗
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
return inputStream2String(connection.getInputStream());
}
} catch (Exception e) {
callback.onError(e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String s) {
if (!TextUtils.isEmpty(s)) {
callback.onSuccess(s);
} else {
callback.onError("没有请求到数据");
}
}
}
/**
* 流转换成字符串
*
* @param inputStream
* @return
*/
private String inputStream2String(InputStream inputStream) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int len = -1;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes);
}
return new String(outputStream.toByteArray());
}
private NetCallback callback;
public void setCallback(NetCallback callback) {
this.callback = callback;
}
/**
* 网络接口回调
*
* @author zhaoliang
* @version 1.0
* @create 2018/6/27
*/
public interface NetCallback {
void onSuccess(String result);
void onError(String errorMsg);
}
}
import android.os.AsyncTask;
import android.text.TextUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* 网络工具类
* 需求:提供get方法获取数据
* 思路:
* 1. HTTPURLConnection/HttpClient
* 2. 异步任务 AsyncTask/线程
* 3. 数据响应 接口回调
*
* @author zhaoliang
* @version 1.0
* @create 2018/6/27
*/
public class HttpUtils {
private static final HttpUtils ourInstance = new HttpUtils();
public static HttpUtils getInstance() {
return ourInstance;
}
private HttpUtils() {
}
/**
* get 请求
*
* @param url 请求地址
* @param callback 回调
*/
public void getRequst(String url, NetCallback callback) {
new LoadDataTask(callback).execute(url);
}
/**
* 异步请求网络
*/
class LoadDataTask extends AsyncTask<String, Void, String> {
private NetCallback callback;
public LoadDataTask(NetCallback callback) {
this.callback = callback;
}
@Override
protected String doInBackground(String... strings) {
// 使用HTTPURLConnection请求网络
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 判断响应吗
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
return inputStream2String(connection.getInputStream());
}
} catch (Exception e) {
callback.onError(e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String s) {
if (!TextUtils.isEmpty(s)) {
callback.onSuccess(s);
} else {
callback.onError("没有请求到数据");
}
}
}
/**
* 流转换成字符串
*
* @param inputStream
* @return
*/
private String inputStream2String(InputStream inputStream) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int len = -1;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes);
}
return new String(outputStream.toByteArray());
}
private NetCallback callback;
public void setCallback(NetCallback callback) {
this.callback = callback;
}
/**
* 网络接口回调
*
* @author zhaoliang
* @version 1.0
* @create 2018/6/27
*/
public interface NetCallback {
void onSuccess(String result);
void onError(String errorMsg);
}
}