构造方法的参数:服务器网址,通信协议,通信成功接口,通信失败接口,参数键值对
AsyncTask<Params, Progress, Result>
AsyncTask执行的四个步骤:
onPreExecute():
doInBackground(Params...)
onProgressUpdate(Progress...)
onPostExecute(Result)
package com.hxdb.wkj.net;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import android.os.AsyncTask;
import com.hxdb.wkj.app.Config;
/**
*
* Description: 网络通信基类
*
* @author ouzhongyuan
* @date 2014-10-28
* @version 1.0
*
*/
public class NetConnection {
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:
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:
uc = new URL(url + "?" + paramsStr.toString())
.openConnection();
break;
}
System.out.println("Resquest url:" + uc.getURL());
System.out.println("Resquest data:" + paramsStr);
BufferedReader brBufferedReader = new BufferedReader(
new InputStreamReader(uc.getInputStream(),
Config.CHARSET));
String line = null;
StringBuffer result = new StringBuffer();
while ((line = brBufferedReader.readLine()) != null) {
result.append(line);
}
System.out.println("Result:" + result);
return result.toString();
} catch (Exception e) {
}
return null;
}
@Override
protected void onPostExecute(String result) {
if (result != null) {
if (successCallback != null) {
successCallback.onSuccess(result);
}
} else {
if (failCallback != null) {
failCallback.onFail();
}
}
super.onPostExecute(result);
}
}.execute();
}
public static interface SuccessCallback {
void onSuccess(String result);
}
public static interface FailCallback {
void onFail();
}
}
package com.hxdb.wkj.net.user;
import org.json.JSONException;
import org.json.JSONObject;
import com.hxdb.wkj.app.Config;
import com.hxdb.wkj.net.HttpMethod;
import com.hxdb.wkj.net.NetConnection;
/**
* Description: 用户登录网络类
*
* @author zhangxiaopan
* @date 2014-11-1
* @version 1.0
*
*/
public class Login {
public Login(String username, String password, final SuccessCallback successCallback,
final FailCallback failCallback) {
new NetConnection(Config.SERVER_URL, HttpMethod.POST, new NetConnection.SuccessCallback() {
@Override
public void onSuccess(String result) {
try {
JSONObject jsonObject = new JSONObject(result);
switch (jsonObject.getInt(Config.KEY_STATUS)) {
case Config.RESULT_STATUS_SUCCESS:
successCallback.onSuccess(jsonObject.getString(Config.KEY_TOKEN),
jsonObject.getString(Config.KEY_USERID));
break;
default:
if (failCallback != null) {
failCallback.onFail();
}
break;
}
} catch (JSONException e) {
e.printStackTrace();
if (failCallback != null) {
failCallback.onFail();
}
}
}
}, new NetConnection.FailCallback() {
@Override
public void onFail() {
if (failCallback != null) {
failCallback.onFail();
}
}
}, Config.KEY_ACTION, Config.ACTION_LOGIN, Config.KEY_USERNAME, username, Config.KEY_PASSWORD, password);
}
public static interface SuccessCallback {
void onSuccess(String token, String userId);
}
public static interface FailCallback {
void onFail();
}
}