1,先写好接口:
public interface RequestCallback {
//请求成功的方法
void success(String data);
//请求失败的方法
void fail(String data);
}
如果有兴趣的朋友可以加个过程的方法。
2,开始写网络请求的逻辑方法:
get方法
private static final String doGet(String url) throws IOException {
//创建一个URL对象
URL reUrl = new URL(url);
//打开一个连接
HttpURLConnection conn = (HttpURLConnection) reUrl.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
//设置连接超时的时间
conn.setConnectTimeout(5000);
//设置读取超时的时间
conn.setReadTimeout(5000);
//连接
conn.connect();
//获取返回码
int code = conn.getResponseCode();
if (code == 200) {
//获取输入流
InputStream inputStream = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
StringBuffer buffer = new StringBuffer();
//读取一行
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
//请求成功
String result = buffer.toString();
inputStream.close();
conn.disconnect();
reader.close();
return result;
}
return null;
}
post方法:
private static final String doPost(String url, Map params) throws IOException {
//先处理参数
//把Map转化为Set集合
Set> entrySet = params.entrySet();
//从Set里获取迭代器
Iterator> iterator = entrySet.iterator();
StringBuffer buffer = new StringBuffer();
//迭代Set,进行字符串连接
while (iterator.hasNext()) {
Map.Entry entry = iterator.next();
String key = entry.getKey();
//添加参数名称
buffer.append(key);
//添加"="
buffer.append("=");
//获取参数值
String value = entry.getValue();
//添加参数值
buffer.append(value);
//添加"&"
buffer.append("&");
}
String paramsString = buffer.toString();
//在连接完后,最后面多了一个“&”
paramsString = paramsString.substring(0, paramsString.length() - 1);
try {
//创建一个URL对象
URL reUrl = new URL(url);
//打开一个连接
HttpURLConnection conn = (HttpURLConnection) reUrl.openConnection();
//POST请求必须要加上这一句,必须大写
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//不能使用缓存
conn.setUseCaches(false);
//设置连接超时的时间
conn.setConnectTimeout(20000);
//设置读取超时的时间
conn.setReadTimeout(20000);
//连接
conn.connect();
//获取一个输出流
OutputStream outputStream = conn.getOutputStream();
//把参数写进去
outputStream.write(paramsString.getBytes());
outputStream.flush();
//获取返回码
int code = conn.getResponseCode();
if (code == 200) {
//获取输入流
InputStream inputStream = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
StringBuffer resultBuffer = new StringBuffer();
//读取一行
while ((line = reader.readLine()) != null) {
resultBuffer.append(line);
}
//请求成功
String result = resultBuffer.toString();
inputStream.close();
conn.disconnect();
reader.close();
outputStream.close();
return result;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
3,接着开始封装方法回调:
get请求封装
public static void getRequest(String url,RequestCallback rc){
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
String data=doGet(url);
rc.success(data);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
rc.fail(e.toString());
}
}
}).start();
}
post请求封装
public static void postRequest(String url,Map map,RequestCallback rc){
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
String data=doPost(url, map);
rc.success(data);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
rc.fail(e.toString());
}
}
}).start();
}
4,开始调用网络请求
最后:一个简单的网络请求框架封装完成,对于初学者来说用来装B最好不过,如果有不足之处望各位大神指教。