Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Base-Android快速開發框架(四)--網絡操作之FastJson以及AsyncHttpClient,androidfastjson

Base-Android快速開發框架(四)--網絡操作之FastJson以及AsyncHttpClient,androidfastjson

編輯:關於android開發

Base-Android快速開發框架(四)--網絡操作之FastJson以及AsyncHttpClient,androidfastjson


  Android的展示數據,除了上章所講的本地存儲外,大部分數據都來自於網絡。首先介紹一下Android APP開發常見的網絡操作方式。從網絡層面上有底層的tcp/ip,也就是我們常見的socket套接字,常見於IM、消息推送等應用場景。另外常見的就是Http協議、webservice協議,常用於提供數據接口。常應用的數據格式有xml、json。其中最常見的也就是Http+Json的組合,這也是我們接下來要講解的重點。在這麼多項目的累計中,對於Http的訪問,我用過HttpUtil這樣的工具類,當然裡面封裝了簡單的get post方法。另外也用過volley這樣的集成框架。現在向大家推薦下我覺得最好用的一個框架就是AsyncHttpClient。先上一段簡單的示例代碼。

AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() {       @Override     public void onStart() {         // called before request is started     }       @Override     public void onSuccess(int statusCode, Header[] headers, byte[] response) {         // called when response HTTP status is "200 OK"     }       @Override     public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {         // called when response HTTP status is "4XX" (eg. 401, 403, 404)     }       @Override     public void onRetry(int retryNo) {         // called when request is retried     } });   全在UI線程之外發生,而callback發生在創建它的線程中,應用了Android的Handler發送消息機制。你也可以把AsyncHttpClient應用在Service中或者後台線程中,庫代碼會自動識別出它所運行的context。github下載地址:https://github.com/loopj/android-async-http 。庫的size很小,所有的一切只有90kb,發送異步http請求,在匿名callback對象中處理response,http請求發生在UI線程之外,內部采用線程池來處理並發請求。詳細可以度娘一下。    另外一個就是Json的解析,當然有sdk裡面的JSONArray JsonObject,也用過gson的框架,這個過程中,用到最好用的就是阿裡巴巴的fastJosn。Base裡面集成了一個JsonUtil的工具類,可以快速實現對象 json等的相互轉化,直接上下代碼:
   
public final class JsonUtil {

private static String TAG = "FastJson";

public static boolean isSuccess(String jsonString) {
JSONObject json;
boolean flag = false;
try {
json = new JSONObject(jsonString);
flag = json.getBoolean("result");
} catch (JSONException e) {
e.printStackTrace();
}
return flag;
}

public static String getArrayString(String jsonString, String key) {
String value = "";
JSONObject json;
try {
json = new JSONObject(jsonString);
value = json.getJSONArray(key).toString();
} catch (JSONException e) {
e.printStackTrace();
}
return value;
}

public static String convertObjectToJson(Object o) {
SerializerFeature[] features = { SerializerFeature.QuoteFieldNames,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.WriteSlashAsSpecial,
SerializerFeature.BrowserCompatible,
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteDateUseDateFormat };

try {
Log.d(TAG, JSON.toJSONString(o, features));
return JSON.toJSONString(o, features);
} catch (Exception e) {
Log.e(TAG, e.toString());
return "";
}
}

public static <T> T convertJsonToObject(String json, Class<T> clazz) {
try {
return JSON.parseObject(json, clazz);
} catch (Exception e) {
Log.e(TAG, e.toString());
Log.e("merror", e.toString());
return null;
}
}

public static <T> List<T> convertJsonToList(String json, Class<T> clazz) {
try {
return JSON.parseArray(json, clazz);
} catch (Exception e) {
Log.e(TAG, e.toString());
System.out.println(e.toString());
return null;
}
}
}


  到這裡大家是不是以為就結束了,當然不是,還能更easy。下節將介紹自己封裝的CustomAsyncHttpClient CustomAsyncResponehandler。將這兩個框架整合,先上一段代碼:    網絡操作的登陸方法:
public void login(final String userName, final String password, final CustomAsyncResponehandler handler) {
RequestModel requestModel = new RequestModel();
RequestParams params = new RequestParams();
params.put("userName", userName);
params.put("password", password);
requestModel.setParams(params);
requestModel.setCls(User.class);
requestModel.setShowErrorMessage(true);
requestModel.setUrl(Urls.userLogin);
httpClient.post(requestModel, new CustomAsyncResponehandler() {
@Override
public void onSuccess(ResponeModel baseModel) {
super.onSuccess(baseModel);

if (baseModel != null && baseModel.isStatus()) {
AppContext.currentUser = (User) baseModel.getResultObj();
AppContext.currentUser.setUserName(userName);
if (userDao != null) {
userDao.insert(AppContext.currentUser);
}
}
handler.onSuccess(baseModel);
}
});
}

  在業務層都看不到json的解析代碼了,直接通過CustomAsyncHttpClient拿到目標對象進行操作,下節將詳細講解。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved