AndNetAndroid二次封裝的網(wǎng)絡(luò)框架
AndNet
AndNet是一個(gè)Android開(kāi)中中二次封裝的網(wǎng)絡(luò)框架,可以任意輕松切換使用的底層網(wǎng)絡(luò)請(qǐng)求框架,AndNet使用Parser-Callback模式,可以輕松實(shí)現(xiàn)從網(wǎng)絡(luò)請(qǐng)求到數(shù)據(jù)解析的整個(gè)操作步驟。
AndNet的網(wǎng)絡(luò)請(qǐng)求框架默認(rèn)使用OkHttp,當(dāng)然你完全可以輕松的實(shí)現(xiàn)自己的請(qǐng)求操作并且替換,而你的業(yè)務(wù)邏輯代碼無(wú)需任何變動(dòng)。
更新日志
0.1.2版本更新
加入put、delete請(qǐng)求的支持
可直接post、put一段json
cancel加入stack為空判斷
0.1.1版本更新
加入debug
修復(fù)WeakReference帶來(lái)的問(wèn)題
重用網(wǎng)絡(luò)框架的cancel功能,加入tag標(biāo)識(shí)
使用
1 初始化
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
OkHttpStack okHttpStack = new OkHttpStack();
okHttpStack.debug(true);
Net.init(okHttpStack);
}
}
2 定義parser
public class CommParser<T> implements Net.Parser<T> {
private String mKey;
public CommParser(String key) {
mKey = key;
}
@Override
public Result<T> parse(String response) {
Result<T> result = new Result<T>();
try {
JSONObject baseObject = JSON.parseObject(response);
if(!baseObject.getBooleanValue("success")) {
result.setMsg(baseObject.getString("message"));
}else {
Class<T> klass = Helper.generateType(getClass());
if(klass == null) throw new Exception();
T t = baseObject.getObject(mKey, klass);
result.setStatus(Result.SUCCESS);
result.setResult(t);
return result;
}
} catch (Exception e) {
e.printStackTrace();
result.setMsg(Net.ERR_PARSE_MSG);
}
result.setStatus(Result.ERROR);
return result;
}
}
3 get請(qǐng)求
Net.get("http://192.168.3.116/?name=loader&age=18&city=jinan",
new CommParser<User>("user") {}, new Net.Callback<User>() {
@Override
public void callback(Result<User> result) {
if(result.getStatus() == Result.SUCCESS) {
User user = result.getResult();
mTextView.setText(user.getName());
mTextView.append("\n" + user.getAge());
mTextView.append("\n" + user.getCity());
}else {
mTextView.setText(result.getMsg());
}
}
}, getClass().getName());
4 post請(qǐng)求
User user = new User();
user.setName("qibin");
user.setCity("shandong");
user.setAge(18);
Net.post("http://192.168.3.116/", user, new CommParser<User>("user") {
}, new Net.Callback<User>() {
@Override
public void callback(Result<User> result) {
if(result.getStatus() == Result.SUCCESS) {
mTextView.setText(result.getResult().toString());
}else {
mTextView.setText(result.getMsg());
}
}
}, getClass().getName());
5 文件上傳
RequestParams params = new RequestParams("name", "qibin");
params.add("file", new File(Environment.getExternalStorageDirectory()
+ "/dl.jar"));
Net.post("http://192.168.3.116/upload.php", params, new Net.NoParser(),
new Net.Callback<String>() {
@Override
public void callback(Result<String> result) {
mTextView.setText(result.getResult() + "");
}
}, getClass().getName());
cancel
class MyActivity extend Activity {
@Override
public void onDestroy() {
Net.cancel(getClass().getName());
}
}
6 定制HttpStack
public class VolleyStack<T> extends AbsHttpStack<T> {
private Application mContext;
public VolleyStack(Application context) {
mContext = context;
}
/**
* get請(qǐng)求
*
* @param url 網(wǎng)址
* @param parser 解析器
* @param callback 回調(diào)
*/
@Override
public void get(String url, Net.Parser<T> parser,
Net.Callback<T> callback, final Object tag) {
invoke(Request.Method.GET, url, null, parser, callback, tag);
}
/**
* post請(qǐng)求
*
* @param url 訪(fǎng)問(wèn)的url
* @param params post參數(shù)
* @param parser 解析器
* @param callback 回調(diào)
*/
@Override
public void post(String url, RequestParams params,
Net.Parser<T> parser,
Net.Callback<T> callback,
final Object tag) {
invoke(Request.Method.POST, url, params, parser, callback, tag);
}
/**
* 執(zhí)行網(wǎng)絡(luò)請(qǐng)求
*
* @param url
* @param params post時(shí)請(qǐng)求的參數(shù) get時(shí)為null
* @param parser
* @param callback
* @param method
*/
private void invoke(final int method, final String url,
final RequestParams params,
final Net.Parser<T> parser,
final Net.Callback<T> callback,
final Object tag) {
StringRequest request = new StringRequest(method, url,
new Response.Listener<String>() {
public void onResponse(String response) {
onNetResponse(parser, callback, response);
}
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
onError(callback, Net.DEF_ERR_MSG);
}
}) {
@Override
protected Map<String, String> getParams()
throws AuthFailureError {
if (params != null) return params.get();
return super.getParams();
}
};
VolleyManager.getInstance(mContext).add(request, tag);
}
@Override
public void cancel(Object tag) {
VolleyManager.getInstance(mContext).cancel(tag);
}
}
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Net.init(new VolleyStack(this));
// Net.init(new OkHttpStack());
// Net.init(new OkHttpHeaderStack());
}
}
更多內(nèi)容請(qǐng)操作實(shí)例代碼和博客:http://blog.csdn.net/qibin0506/article/details/50127223
評(píng)論
圖片
表情
