package cn.zhaoliang5156.toutiao1630a.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;
/**
* 网络工具类
* 思路:
* 1. 暴露一个请求数据的方法
* 2. 请求数据的方法中要异步请求网络
* 3. 异步任务需要访问网络
* 4. 网络回来的数据我们需要判断状态码
* 5. 需要使用接口回调传出数据
*
* @author zhaoliang
* @version 1.0
* @create 2018/7/26
*/
public class HttpUtils {
private static final HttpUtils ourInstance = new HttpUtils();
public static HttpUtils getInstance() {
return ourInstance;
}
private HttpUtils() {
}
/**
* 从网络获取数据
*
* @param url
*/
public void getDataFromServer(String url, HttpUtilsCallback callback) {
// 开启异步任务
new LoadDataTask(callback).execute(url);
}
class LoadDataTask extends AsyncTask<String, Void, String> {
private HttpUtilsCallback callback;
public LoadDataTask() {
}
public LoadDataTask(HttpUtilsCallback callback) {
this.callback = callback;
}
@Override
protected String doInBackground(String... strings) {
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) {
super.onPostExecute(s);
if (!TextUtils.isEmpty(s)) {
callback.onSuccess(s);
} else {
callback.onError("没有收到数据");
}
}
}
/**
* 流转换成字符串
*
* @param inputStream
* @return
* @throws IOException
*/
private String inputStream2String(InputStream inputStream) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int len = -1;
byte[] b = new byte[1024];
while ((len = inputStream.read(b)) != -1) {
outputStream.write(b, 0, len);
}
return new String(outputStream.toByteArray());
}
public interface HttpUtilsCallback {
void onSuccess(String result);
void onError(String errorMsg);
}
}
package cn.zhaoliang5156.toutiao1630a.net