FastJSon 과 AsyncHttpCLient

6168 단어
안 드 로 이 드 의 디 스 플레이 데 이 터 는 지난 장 에서 말 한 로 컬 저장 소 를 제외 하고 대부분의 데 이 터 는 네트워크 에서 나온다.먼저 안 드 로 이 드 앱 개발 에서 흔히 볼 수 있 는 네트워크 조작 방식 을 소개 한다.네트워크 차원 에서 밑바닥 tcp / ip, 즉 우리 가 흔히 볼 수 있 는 socket 플러그 인 은 IM, 메시지 전송 등 응용 장면 에서 흔히 볼 수 있다.또한 흔히 볼 수 있 는 것 은 Http 프로 토 콜, 웹 서비스 프로 토 콜 로 데이터 인 터 페 이 스 를 제공 하 는 데 자주 사용 된다.자주 사용 되 는 데이터 형식 은 xml, json 이 있 습 니 다.그 중에서 가장 흔히 볼 수 있 는 것 은 바로 Http + JSon 의 조합 이다. 이것 도 우리 가 다음 에 설명 할 중점 이다.이렇게 많은 항목 의 누적 에서 Http 에 대한 방문 은 HttpUtil 과 같은 도구 류 를 사용 한 적 이 있 습 니 다. 물론 그 안에 간단 한 get post 방법 이 포함 되 어 있 습 니 다.볼 리 같은 통합 프레임 워 크 도 사용 했다.지금 추천 해 드 리 겠 습 니 다. 제 가 가장 잘 쓰 는 프레임 워 크 는 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 스 레 드 를 제외 하고 내부 에 스 레 드 풀 로 동시 요청 을 처리 합 니 다. 자세 한 내용 은 어머니 를 도 울 수 있 습 니 다.
 
 또 하 나 는 제 이 슨 의 해석 입 니 다. 물론 sdk 에 있 는 JSONarray Json Object 도 있 고 gs on 의 프레임 워 크 도 사용 한 적 이 있 습 니 다. 이 과정 에서 가장 좋 은 것 은 알 리 바 바 의 fastJosn 입 니 다. Base 에는 JSonUtil 의 도구 류 가 통합 되 어 있 습 니 다. 대상 제 이 슨 등의 상호 전환 을 신속하게 실현 하고 상하 코드 를 직접 사용 할 수 있 습 니 다.
 
 
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;
}
}
}



  여기까지 만 해도 끝 이 라 고 생각 하 십 니까? 물론 아 닙 니 다. 더 쉬 울 수 있 습 니 다. 다음 절 에 서 는 자신 이 봉 인 된 CustomAsyncHttp Client CustomAsyncResponsehandler 를 소개 합 니 다. 이 두 프레임 워 크 를 통합 시 키 고 이전 코드 를 먼저 소개 합 니 다.
 
네트워크 작업 의 로그 인 방법:
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 를 통 해 대상 을 직접 받 아 조작 합 니 다.

좋은 웹페이지 즐겨찾기