Android OKHTTP의 단일 예제 및 패키지된 인스턴스
/**
* Created by zm on 16-2-1
* okhttp , 2.x ,3.x okhttpclient
* builder
* , 、 、dns,okhttp ,
* ,
*/
public class OkHttpUtil
{
private static OkHttpClient singleton;
// , new, ,
private OkHttpUtil(){
}
public static OkHttpClient getInstance() {
if (singleton == null)
{
synchronized (OkHttpUtil.class)
{
if (singleton == null)
{
singleton = new OkHttpClient();
}
}
}
return singleton;
}
}
이전에 okhttp 원본을 보았을 때 square가 okhttpclient에 대한 단례를 찾지 않았고 인터넷에서도 적당한 해석을 찾지 못했다. 다음은 자신의 추측이다.
장점: 단일 모드를 사용하여 여러 번 발생하는 쓰레기를 피할 수 있다
단점: 일부 특수한 수요의 코드에 대해 유연한 설정을 하기 때문에 단일 모델은 실현하기 어렵다.
총괄: 우수한 소스 오픈 프레임워크로서 square의 출발점은 사용자가 더욱 원활하게 사용하고 확장할 수 있도록 하는 것이다. 사용자의 측면에서 볼 때 여러 번 설정할 필요가 없는 프로젝트에 대해 수동으로 하나의 예시 모델을 작성하여 메모리의 효율적인 이용에 편리하도록 한다.
/**
* okhttp
* Created by zm on 16-2-1
* update by zm on 16-3-19 Builder,
*
*/
public class HttpTools
{
private Context context;
private final RequestParams req;
private final Handler handler;
public HttpTools(Builder builder)
{
// TODO Auto-generated constructor stub
context = builder.context;
req = builder.req;
handler = builder.handler;
}
public static class Builder
{
private final RequestParams req;
private final Context context;
private final Handler handler;
public Builder(RequestParams req, Context mContext, Handler handler)
{
// TODO Auto-generated constructor stub
this.req = req;
this.context = mContext;
this.handler = handler;
}
public HttpTools build() {
return new HttpTools(this);
}
}
public void requestBuilder() {
// TODO Auto-generated method stub
if(req==null||context==null||handler==null){
throw new NullPointerException("NullPointerException");
}
requestGet(req, context, handler);
}
private static void parse(Call call, final Handler handler,
final RequestParams req) {
//
call.enqueue(new Callback()
{
@Override
public void onResponse(Call call, Response response)
throws IOException {
// TODO Auto-generated method stub
String result = response.body().string();
if (result != null)
{
Message message = Message.obtain();
message.obj = result;
message.what = req.getSuccessMsgWhat();
handler.sendMessage(message);
}
}
@Override
public void onFailure(Call call, IOException e) {
// TODO Auto-generated method stub
handler.sendEmptyMessage(req.getFailMsgWhat());
}
});
}
/**
*
* @param req
* @param context
* @param handler
*
* get
*/
public static void requestGet(final RequestParams req,
final Context context, final Handler handler) {
// Request
final Request request = new Request.Builder().url(req.getRequestUrl()).build();
Call call = OkHttpUtil.getInstance().newCall(request);
parse(call, handler, req);
}
/**
* post
*/
public static void requestPost(final RequestParams req,
final Context context, final Handler handler) {
FormBody.Builder builder = new FormBody.Builder();
// RequestParams ,RequestParams
for (Map.Entry mEntry : req.getParamEntry())
{
String mEntryKey = mEntry.getKey();
Object mEntryValue = mEntry.getValue();
if (TextUtils.isEmpty(mEntryKey))
{
continue;
}
builder.add(mEntryKey, mEntryValue.toString());
}
RequestBody body = builder.build();
Request request = new Request.Builder().url(req.getUrl()).post(body).build();
Call call = OkHttpUtil.getInstance().newCall(request);
parse(call, handler, req);
}
/**
* , , get post
*/
public static void request(RequestParams req, Context mContext,
Handler handler) {
// TODO Auto-generated method stub
requestGet(req, mContext, handler);
}
}
마지막으로 봉제류를 하나 더 바칩니다.
/**
*
* Created by zm on 16-2-1
* Gson json model
*
*/
public class JsonToModel
{
private static String info = "info";
public static String getInfo()
{
return info;
}
public static void setInfo(String info)
{
JsonToModel.info = info;
}
/**
*
* @param msg
* @param t
* model
* @param model
* model
* @return
*/
public static List getJsonArrayToModel(Message msg, Class t,
T model) {
// TODO Auto-generated method stub
List list = new ArrayList();
try {
JSONObject json = new JSONObject(msg.obj.toString());
for (int i = 0; i < json.getJSONArray(getInfo()).length(); i++) {
model = GsonHelper.toType(json.getJSONArray(getInfo()).get(i).toString(), t);
list.add(model);
}
return list;
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("getJsonArrayToModel", "error");
e.printStackTrace();
}
return null;
}
}
json 회전 모델의 이 클래스는 당시에 과도한 성능 문제를 고려하지 않았기 때문에 이 클래스에서 org를 사용했다.json.JSONObject도 gson을 사용했습니다. 여기에 해당하는 최적화를 할 수 있습니다.
궁금한 점이 있으면 댓글을 남기거나 본 사이트 지역사회에 가서 토론을 교류하고 읽어주셔서 감사합니다. 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.