一個Android開中中二次封裝的網絡框架:AndNet
AndNet
AndNet是一個Android開中中二次封裝的網絡框架,可以任意輕松切換使用的底層網絡請求框架,AndNet使用Parser-Callback模式,可以輕松實現從網絡請求到數據解析的整個操作步驟。
AndNet的網絡請求框架默認使用OkHttp,當然你完全可以輕松的實現自己的請求操作并且替換,而你的業務邏輯代碼無需任何變動。
使用
1 初始化
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() + ""); } });
6 定制HttpStack
public class VolleyStack<T> extends AbsHttpStack<T> { private Application mContext; public VolleyStack(Application context) { mContext = context; } /** * get請求 * * @param url 網址 * @param parser 解析器 * @param callback 回調 */ @Override public void get(String url, WeakReference<Net.Parser<T>> parser, WeakReference<Net.Callback<T>> callback) { invoke(Request.Method.GET, url, null, parser, callback); } /** * post請求 * * @param url 訪問的url * @param params post參數 * @param parser 解析器 * @param callback 回調 */ @Override public void post(String url, RequestParams params, WeakReference<Net.Parser<T>> parser, WeakReference<Net.Callback<T>> callback) { invoke(Request.Method.POST, url, params, parser, callback); } /** * 執行網絡請求 * * @param url * @param params post時請求的參數 get時為null * @param parser * @param callback * @param method */ private void invoke(final int method, final String url, final RequestParams params, final WeakReference<Net.Parser<T>> parser, final WeakReference<Net.Callback<T>> callback) { 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); } @Override public void cancel(String 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()); } }
https://github.com/qibin0506/AndNet
public class App extends Application { @Override public void onCreate() { super.onCreate(); Net.init(new 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請求
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()); } } });
4 post請求
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()); } } });
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!