noHttp 단순 실 용
48159 단어 기타
Retrofit 보다 사용 이 더 간단 하고 사용 하기 쉽다.
AndroidStudio 사용 방법
compile 'com.yolanda.nohttp:nohttp:1.1.0'
compile 'com.yanzhenjie.nohttp:okhttp:1.1.0'
Eclipse 사용법
AndroidStudio
학생 들 에 게 빨리 전환 하 라 고 권 했 습 니 다.초기 화
NoHttp 초기 화 는 Context 가 필요 합 니 다.
Application
onCreate()
에서 초기 화 하 는 것 이 좋 습 니 다. manifest.xml
에 등록 Application
하 는 것 을 기억 하 세 요.일반 초기 화
직접 초기 화 후 모든 것 은 기본 설정 을 사용 합 니 다.
NoHttp.initialize(this);
고급 사용자 정의 초기 화
NoHttp.initialize(this, new NoHttp.Config()
// ,
.setConnectTimeout(30 * 1000)
// ,
.setReadTimeout(30 * 1000)
);
NoHttp.initialize(this, new NoHttp.Config()
...
//
.setCacheStore(
new DBCacheStore(this).setEnable(true) // , false 。
)
// SD
.setCacheStore(
new DiskCacheStore(this)
)
);
NoHttp.initialize(this, new NoHttp.Config()
...
// DBCookieStore, 。
.setCookieStore(
new DBCookieStore(this).setEnable(false) // cookie, false 。
)
);
NoHttp.initialize(this, new NoHttp.Config()
...
// HttpURLConnection
.setNetworkExecutor(new URLConnectionNetworkExecutor())
// OkHttp
.setNetworkExecutor(new OkHttpNetworkExecutor())
);
필요 한 권한
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
우호 적 인 디 버 깅 모드
Logger.setDebug(true);// NoHttp , 、 。
Logger.setTag("NoHttpSample");// NoHttp Log tag。
NoHttp 디 버 깅 모드 를 켜 면 요청 과정, 로그, 오류 정 보 를 볼 수 있 습 니 다. 기본적으로 스냅 백 을 사용 하지 않 습 니 다.요청 헤더, 요청 데이터, 응답 헤더, 쿠키 등 을 볼 수 있 고 인쇄 된 로그 가 매우 가지런 하 다.
그 러 니까 만약 에 사용 하 는 과정 에서 무슨 문제 가 생기 면 디 버 깅 모드 를 켜 면 모든 요괴 가 나타 날 것 이다.
제3자 비동기 프레임 워 크
RxJava RxJava, RxAndroid, RxBus, EventBus 등 제3자 비동기 작업 프레임 워 크 와 완벽 하 게 결합 하여 사용 할 수 있 으 며, 여기 서 demo 에서 RxJava 와 함께 사용 하 는 코드 를 제시 합 니 다.구체 적 인 패 키 징 은 데모 의 RxNoHttp 를 참고 하 세 요.
Request<UserInfo> request = new JavaBeanRequest<>(url, UserInfo.class);
RxNoHttp.request(this, request, new SimpleSubscriber<Response<UserInfo>>() {
@Override
public void onNext(Response<YanZhenjie> entityResponse) {
//
UserInfo userInfo = entiryResponse.get();
}
});
요청 대기 열
RequestQueue requestQueue = NoHttp.newRequestQueue();
// , :NoHttp.newRequestQueue(3);
//
requestQueue.add(what, request, responseListener);
responseLisetener
응답 할 때 개발 자 에 게 되 돌려 주기 때문에 개발 자 는 하나의 responseLisetener
로 여러 요청 의 응답 을 받 아들 이 고 what 로 결 과 를 구분 할 수 있 습 니 다.어떤 프레임 워 크 처럼 모든 요청 은 new callback 이 필요 하지 않 습 니 다.요청 형식
String 요청
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
requestQueue.add(0, request, listener);
제 이 슨 요청
// JsonObject
Request<JSONObject> objRequest = NoHttp.createJsonObjectRequest(url, RequestMethod.POST);
requestQueue.add(0, objRequest, listener);
// JsonArray
Request<JSONArray> arrayRequest = NoHttp.createJsonArrayRequest(url, RequestMethod.PUT);
requestQueue.add(0, arrayRequest, listener);
비트 맵 요청
Request<Bitmap> request = NoHttp.createImageRequest(url, RequestMethod.DELETE);
requestQueue.add(0, request, listener);
FastJSon 과 Gson 을 요청 합 니 다.
// FastJson
Request<JSONObject> request = new FastJsonRequest(url, RequestMethod.POST);
requestQueue.add(0, request, listener);
자바 빈 직접 요청
// Gson、FastJson JavaBean
Request<UserInfo> request = new JavaBeanRequest(url, RequestMethod.GET);
requestQueue.add(0, request, listener);
매개 변수 추가
Request<JSONObject> request = new JavaBeanRequest(url, RequestMethod.POST);
.add("name", "yoldada") // String
.add("age", 18) // int
.add("sex", '0') // char
.add("time", 16346468473154) // long
// Bitmap
.add("head", new BitmapBinary(bitmap))
// File
.add("head", new FileBinary(file))
// ByteArray
.add("head", new ByteArrayBinary(byte[]))
// InputStream
.add("head", new InputStreamBinary(inputStream));
파일 업 로드 는 http 폼 의 표준 협 의 를 실현 하여 많은 개발 자의 수 요 를 만족 시 켰 습 니 다. 다음 과 같은 몇 가지 형식 이 있 습 니 다.
Request<String> request = ...
request.add("file", new FileBinary(file));
Request<String> request = ...
request.add("file1", new FileBinary(File));
request.add("file2", new FileBinary(File));
request.add("file3", new InputStreamBinary(InputStream));
request.add("file4", new ByteArrayBinary(byte[]));
request.add("file5", new BitmapBinary(Bitmap));
Request<String> request = ...
fileList.add("image", new FileBinary(File));
fileList.add("image", new InputStreamBinary(InputStream));
fileList.add("image", new ByteArrayBinary(byte[]));
fileList.add("image", new BitmapBinary(Bitmap));
또는:
Request<String> request = ...
List<Binary> fileList = ...
fileList.add(new FileBinary(File));
fileList.add(new InputStreamBinary(InputStream));
fileList.add(new ByteArrayBinary(byte[]));
fileList.add(new BitmapStreamBinary(Bitmap));
request.add("file_list", fileList);
제출 요청 패키지
제출 바디 는 제출 JSon, 제출 String, 제출 Xml, 커 뮤 니 케 이 션 등 으로 나 뉘 는데 구체 적 인 용법 은 다음 과 같다.
// String
request.setDefineRequestBody(String, ContentType);
// json
request.setDefineRequestBodyForJson(JsonString)
// jsonObject , json
request.setDefineRequestBodyForJson(JSONObject)
// xml
request.setDefineRequestBodyForXML(XmlString)
// Body, File( ), InputStream
request.setDefineRequestBody(InputStream, ContentType)
동기 화 요청
현재 스 레 드 에서 요청 합 니 다. 스 레 드 에서 이렇게 사용 합 니 다.
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.DELETE);
Response<String> response = NoHttp.startRequestSync(request);
if (response.isSucceed()) {
//
} else {
//
}
5 대 캐 시 모드
NoHttp 의 캐 시 는 매우 강력 합 니 다. 캐 시 를 데이터베이스 로, SD 카드 로 바 꾸 는 것 을 지원 합 니 다. 또한 캐 시 를 데이터베이스 나 SD 에 상 관 없 이 NoHttp 는 데 이 터 를 암호 화 했 습 니 다. 초기 화 할 때 캐 시 위 치 를 설정 해 야 합 니 다.
주의해 야 할 것 은 6.0 이상 의 휴대 전화 에서 SD 카드 에 캐 시 하려 면 요청 하기 전에 실행 요청 시 권한 이 필요 하 며, 실행 권한 을 모 르 면 이 항목 을 볼 수 있 습 니 다: AndPermission.
NoHttp.initialize(this, new NoHttp.Config()
...
//
.setCacheStore(
new DBCacheStore(this).setEnable(true) // , false 。
)
// SD
.setCacheStore(
new DiskCacheStore(this)
)
);
Request<JSONObject> request = NoHttp.createJsonObjectRequest(url);
request.setCacheMode(CacheMode.DEFAULT);
Request<JSONObject> request = NoHttp.createJsonObjectRequest(url);
request.setCacheMode(CacheMode.REQUEST_NETWORK_FAILED_READ_CACHE);
요청 String, 캐 시 String:
Request<JSONObject> request = NoHttp.createJsonObjectRequest(url);
// Http , IF_NONE_CACHE_REQUEST_NETWORK
request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST_NETWORK);
요청 그림, 캐 시 그림:
Request<Bitmap> request = NoHttp.createImageRequest(imageUrl);
request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST_NETWORK);
Request<Bitmap> request = NoHttp.createImageRequest(imageUrl);
request.setCacheMode(CacheMode.ONLY_REQUEST_NETWORK);
...
Request<Bitmap> request = NoHttp.createImageRequest(imageUrl);
request.setCacheMode(CacheMode.ONLY_READ_CACHE);
파일 다운로드
다운로드 파일 코드 가 많 기 때문에 관건 적 인 부분 을 붙 입 니 다. 구체 적 인 것 은 demo 를 참고 하 십시오.
파일 다운로드 도 대기 열 입 니 다. 대기 열 은 처음에 요청 한 대기 열 과 같 습 니 다.
//
downloadRequest = NoHttp.createDownloadRequest...
// what
// downloadRequest
// downloadListener
downloadQueue.add(0, downloadRequest, downloadListener);
downloadRequest.cancel();
private DownloadListener downloadListener = new DownloadListener() {
@Override
public void onStart(int what, boolean resume, long preLenght, Headers header, long count) {
//
}
@Override
public void onProgress(int what, int progress, long downCount) {
//
}
@Override
public void onFinish(int what, String filePath) {
//
}
@Override
public void onDownloadError(int what, StatusCode code, CharSequence message) {
//
}
@Override
public void onCancel(int what) {
//
}
};
취소 요청
NoHttp 는 어떤 요청 을 취소 하고 여러 요청 을 취소 하 며 모든 요청 을 취소 하 는 것 을 지원 합 니 다.
request.cancel();
request1.setCancelSign(sign);
request2.setCancelSign(sign);
...
// sign
queue.cancelBySign(sign);
queue.cancelAll();
대기 열 정지
대기 열 이 멈 춘 후에 요청 을 대기 열 에 추가 하면 요청 이 실행 되 지 않 습 니 다.
RequestQueue queue = NoHttp.newRequestQueue();
...
queue.stop();
사용자 정의 요청
NoHttp 의 모든 자체 요청 은 계승
RestRequest
클래스 이기 때문에 사용자 정의 요청 도 계승 RestRequest
해 야 합 니 다. 요청 하고 자 하 는 데이터 형식 을 범용 으로 쓰 고 마지막 으로 parseResponse()
방법 에서 서버 데 이 터 를 원 하 는 데이터 형식 으로 분석 하면 됩 니 다.public class FastJsonRequest extends RestRequestor<JSONObject> {
public FastJsonRequest(String url) {
this(url, RequestMethod.GET);
}
public FastJsonRequest(String url, RequestMethod requestMethod) {
super(url, requestMethod);
}
@Override
public JSONObject parseResponse(Headers header, byte[] body) throws Throwable {
String result = StringRequest.parseResponseString(headers, body);
return JSON.parseObject(result);
}
}
public class JavaBeanRequest extends RestRequest<T> {
private Class<T> clazz;
public JavaBeanRequest(String url, Class<T> clazz) {
this(url, RequestMethod.GET, clazz);
}
public JavaBeanRequest(String url, RequestMethod requestMethod, Class<T> clazz) {
super(url, requestMethod);
this.clazz = clazz;
}
@Override
public T parseResponse(Headers header, byte[] body) throws Throwable {
String response = StringRequest.parseResponseString(header, body);
// , , ParseError 。
return JSON.parseObject(response, clazz);
}
}
// FastJson
Request<JSONObject> request = new FastJsonRequest(url, requestMethod);
queue.add(what, mRequest, listener);
...
// JavaBean
Request<UserInfo> request = new JavaBeanRequest(url, UserInfo.class);
queue.add(what, request, listener);
코드 혼동
NoHttp 는 고 버 전 시스템 을 호 환 하 는 api 에 반사 호출 을 사용 하도록 설계 되 었 기 때문에 모든 클래스 가 혼 동 될 수 있 습 니 다. 굳이 keep 를 원 하지 않 는 다 면 다음 설정 을 사용 하면 됩 니 다.
-dontwarn com.yolanda.nohttp.**
-keep class com.yolanda.nohttp.**{*;}
// nohttp
-dontwarn com.yolanda.nohttp.**
-keep class com.yolanda.nohttp.**{*;}
// nohttp-okhttp
-dontwarn com.yanzhenjie.nohttp.**
-keep class com.yanzhenjie.nohttp.**{*;}
// okhttp
-dontwarn okhttp3.**
-keep class okhttp3.** { *;}
-dontwarn okio.**
-keep class okio.** { *;}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
요구사항 정의요구사항 정의 작성 방법 개요 ・목적 표시되고 있는 텍스트를 가변으로 한다 · 과제 표시된 텍스트가 변경되지 않음 ・해결 표시되고 있는 텍스트가 가변이 된다 사양 · 표시 정의 각 편집 화면 ○○ 표시되고 있는 텍스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.