package com.example.administrator.searchpicturetool.widght.imageLoader;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.google.gson.Gson;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 简单封装的网络请求库,支持GET、POST、自动回调回UI线程、自动解析Json数据成javaBean对象
* Created by wenhuaijun on 2016/4/24 0024.
*/
public class NetRequest {
public static Handler handler = new Handler(Looper.getMainLooper());
public static void getRequest(final String httpUrl, final CallBack callBack){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection httpUrlConnection=null;
try {
URL url = new URL(httpUrl);
httpUrlConnection =(HttpURLConnection)url.openConnection();
httpUrlConnection.setRequestMethod("GET");
//设置是否允许输入,默认都是true
// httpUrlConnection.setDoInput(true);
//设置是否允许输出,默认是false,post的时候需要改为true
//httpUrlConnection.setDoOutput(true);
InputStream inputStream =httpUrlConnection.getInputStream();
final String response =getStringFromInputStream(inputStream);
handler.post(new Runnable() {
@Override
public void run() {
callBack.onSuccess(response);
}
});
} catch (final MalformedURLException e) {
e.printStackTrace();
handler.post(new Runnable() {
@Override
public void run() {
callBack.onError(e, "error");
}
});
} catch (final IOException e) {
e.printStackTrace();
handler.post(new Runnable() {
@Override
public void run() {
callBack.onError(e, "error");
}
});
}
finally {
if(httpUrlConnection!=null)
httpUrlConnection.disconnect();
}
}
}).start();
}
public static <T> void getRequest( final String httpUrl, final Class<T> type,final BeanCallback<T> callBack){
getRequest( httpUrl, new CallBack() {
@Override
public void onSuccess(String response) {
Log.i("TAG",response);
callBack.onSuccess(new Gson().fromJson(response,type));
}
@Override
public void onError(Exception exception, String errorInfo) {
callBack.onError(exception,errorInfo);
}
});
}
public static <T> void postRequest( final String httpUrl, final HashMap<String, String> params, final Class<T> type,final BeanCallback<T> callBack){
postRequest(httpUrl, params, new CallBack() {
@Override
public void onSuccess(String response) {
callBack.onSuccess(new Gson().fromJson(response,type));
}
@Override
public void onError(Exception exception, String errorInfo) {
callBack.onError(exception,errorInfo);
}
});
}
public static void postRequest( final String httpUrl, final HashMap<String, String> params, final CallBack callBack){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection httpUrlConnection = null;
PrintWriter printWriter;
String stringParams=praseParams(params);
try {
URL url = new URL(httpUrl);
httpUrlConnection = (HttpURLConnection)url.openConnection();
httpUrlConnection.setRequestMethod("POST");
httpUrlConnection.setDoOutput(true);
//获取UrlConnection对象对应的输入流
printWriter = new PrintWriter(httpUrlConnection.getOutputStream());
//发送请求参数到请求正文
printWriter.write(stringParams);
printWriter.flush();
//根据responseCode判断连接是否成功
if(httpUrlConnection.getResponseCode()!=200){
Log.i("response", "postRequest onError");
}else{
Log.i("response","postRequest success");
}
final String response=getStringFromInputStream(httpUrlConnection.getInputStream());
handler.post(new Runnable() {
@Override
public void run() {
callBack.onSuccess(response);
}
});
} catch (final MalformedURLException e) {
e.printStackTrace();
handler.post(new Runnable() {
@Override
public void run() {
callBack.onError(e, "error");
}
});
} catch (final IOException e) {
e.printStackTrace();
handler.post(new Runnable() {
@Override
public void run() {
callBack.onError(e, "error");
}
});
}
finally {
httpUrlConnection.disconnect();
}
}
}).start();
}
//将输入字节流转化为String
public static String getStringFromInputStream(InputStream inputStream){
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
String temp;
try {
while ((temp =reader.readLine())!=null){
buffer.append(temp);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(reader!=null)
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return buffer.toString();
}
public static String praseParams(Map<String,String> params){
StringBuffer postParams=new StringBuffer();
//组织请求参数
Iterator iterable = params.entrySet().iterator();
while(iterable.hasNext()){
Map.Entry entry =(Map.Entry)iterable.next();
postParams.append(entry.getKey());
postParams.append("=");
postParams.append(entry.getValue());
postParams.append("&");
}
if(postParams.length()>0){
postParams.deleteCharAt(postParams.length()-1);
Log.i("response", postParams.toString());
}
return postParams.toString();
}
//通过url下载图片,未缩放图片宽高
public static Bitmap downloadBitmapFromUrl(String urlString){
Bitmap bitmap =null;
HttpURLConnection urlConnection =null;
BufferedInputStream in =null;
try {
final URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
in = new BufferedInputStream(urlConnection.getInputStream(),8*1024);
bitmap = BitmapFactory.decodeStream(in);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (Throwable e){
bitmap =null;
com.jude.utils.JUtils.Log("ImageDiskLrucache->BitmapFactory.decodeStream Exception!");
} finally {
try {
if(in!=null){
in.close();
}
if(urlConnection!=null){
urlConnection.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return bitmap;
}
//通过url下载图片获取字节流写入输出流中
public static boolean downloadUrlToStream(String imageUrl,OutputStream outputStream){
HttpURLConnection urlConnection =null;
BufferedInputStream in =null;
BufferedOutputStream out =null;
try {
final URL url = new URL(imageUrl);
urlConnection =(HttpURLConnection) url.openConnection();
in =new BufferedInputStream(urlConnection.getInputStream(),8*1024);
out =new BufferedOutputStream(outputStream,8*1024);
int b;
while ((b =in.read()) !=-1){
out.write(b);
}
//写入成功返回true
return true;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(urlConnection!=null){
urlConnection.disconnect();
}
try {
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
public interface CallBack{
public void onSuccess(String response);
public void onError(Exception exception, String errorInfo);
}
public interface BeanCallback<T>{
public void onSuccess(T response);
public void onError(Exception exception, String errorInfo);
}
}