Android 网络通信基类的实现

来源:互联网 发布:乐视电视转换网络电视 编辑:程序博客网 时间:2024/06/05 05:59

为了方便我们与服务器的通信,我们需要实现一个网络通信基类。

实现代码如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import com.jikexueyuan.secret.Config;
import android.os.AsyncTask;


public class NetConnection {
/**

* @param url             通信地址
* @param method          通信方法  get post
* @param successCallback 通知调用者 成功
* @param failCallback    通知调用者 失败
* @param kvs             通信可变字符串参数
*/
public NetConnection(final String url,final HttpMethod method,final SuccessCallback successCallback,final FailCallback failCallback,final String ...kvs){

//网络链接会阻塞主线程,需要异步任务执行网络链接
new AsyncTask<Void, Void, String>() {


@Override
protected String doInBackground(Void... arg0) {
StringBuffer paramsStr = new StringBuffer();
for (int i = 0; i < kvs.length; i+=2) {
paramsStr.append(kvs[i]).append("=").append(kvs[i+1]).append("&");
}

try {
URLConnection uc;
switch (method) {
case POST:  //以post方式通信
uc = new URL(url).openConnection();
uc.setDoOutput(true);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(uc.getOutputStream(), Config.CHARSET));
bw.write(paramsStr.toString());
bw.flush();
break;


default:   //以get方式通信
uc = new URL(url+"?"+paramsStr.toString()).openConnection();
break;
}
System.out.println("Request url:"+uc.getURL());
System.out.println("Request data:"+paramsStr);


BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream(), Config.CHARSET));
String line = null;
StringBuffer result = new StringBuffer();
while((line=br.readLine()) != null){
result.append(line);
}
System.out.println("Result" + result);
return result.toString();

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//通知调用者
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result != null){
if(successCallback != null){
successCallback.onSuccess(result);
}
}else{
if(failCallback != null){
failCallback.onFaid();
}
}
}
}.execute();
}

public static interface SuccessCallback{
void onSuccess(String result);
}

public static interface FailCallback{
void onFaid();
}
}

1 0