EasyFrame 3.0.0 網絡框架使用說明
EasyFrame3.0.0是采用 RxJava 和 Retrofit 實現的網絡處理架構,采用 Glide 作為圖片處理架構。極大的簡化了APP開發中的框架搭建,library項目已經上傳 Jcenter 和 Maven 庫,GitHub地址:https://github.com/QiYuan007/EasyFrame 使用方式如下:
Jcenter:
compile 'com.qy.easyframe:easyframe:3.0.0'
Maven:
<dependency>
<groupId>com.qy.easyframe</groupId>
<artifactId>easyframe</artifactId>
<version>3.0.0</version>
<type>pom</type>
</dependency>
使用方法:
一.網絡請求的回調接口為ResultSubscriber.OnResultListener在請求網絡的界面或者業務邏輯中實現此接口并實現接口的三個方法,分別是:
/**
* 網絡請求訂閱開始
*/
void onStart(int requestType);
/**
* 網絡請求錯誤
*/
void onError(int requestType,Throwable e);
/**
* 處理請求結果
*/
void onResult(IModel model, int requestType);
三個方法看名字就知道對應的功能,其中 requestType 字段為不同網絡請求的標示,可以自行區分。IModel 類為返回的json字段對應的 JavaBean 類的公共父類,所有的 Response 的類,都要繼承 IModel 類。
二.定義你的針對 Retrofit 的網絡請求接口,如下:
/**
* @Author: qiyuan
* @Data: 16/4/12 下午2:57
* @Description: 網絡請求接口
*/
public interface INetInterface {
/**
* get 請求
* @param city
* @return
*/
@GET("data/cityinfo/{city_id}")
Observable<WeatherResponse> getWeather(@Path("city_id") String city);
/**
* post 請求
* @param body javabean請求體
* @return
*/
@POST("data/cityinfo/")
Observable<WeatherResponse> postWeather(@Body WeatherRequest body);
/**
* post請求
* @param params 表單
* @return
*/
@POST("data/cityinfo/")
Observable<WeatherResponse> postWeather2(@FieldMap Map<String, String> params);
}
如上接口,需要自定義的地方有:
- 請求方式的注解內的字符串,替換成自己的除主機地址外的地址或者全地址(通常是除主機外的地址)
- Observable中的泛型,是網絡請求響應回來的json字符串對應的JavaBean對象,統一繼承IModel父類
- 方法名當然是自己起名字啦。。
注意
此接口不能有繼承關系
三.定義第二步網絡請求接口的實現類,如下:
/**
* @Author: qiyuan
* @Data: 16/10/25 下午3:24
* @Description: HTTP請求實現類
*/
public class HttpRequest {
public HttpRequest() {
}
/**
* 單例控制器
*/
private static class SingletonHolder {
private static final HttpRequest INSTANCE = new HttpRequest();
}
/**
* 獲取單例對象
*
* @return
*/
public static HttpRequest getInstance() {
return HttpRequest.SingletonHolder.INSTANCE;
}
/**
* get獲取網絡數據的方法
*
* @param cityId
*/
public Subscriber getWeather(String cityId, int resultType, ResultSubscriber.OnResultListener listener) {
Observable<WeatherResponse> observable = HTTPHelper.getInstance().init(Constant.BASE_PATH, INetInterface.class).getWeather(cityId);
return HTTPHelper.getInstance().doRequest(observable, resultType, listener);
}
/**
* post獲取網絡數據的方法
*
* @param body
*/
public Subscriber postWeather(WeatherRequest body, int resultType, ResultSubscriber.OnResultListener listener) {
Observable<WeatherResponse> observable = HTTPHelper.getInstance().init(Constant.BASE_PATH, INetInterface.class).postWeather(body);
return HTTPHelper.getInstance().doRequest(observable, resultType, listener);
}
/**
* 自定義headers
* @param cityId
* @param resultType
* @param listener
* @return
*/
public Subscriber getRecommendDetails(String cityId, int resultType, ResultSubscriber.OnResultListener listener) {
Map<String, String> map = new HashMap<>();
map.put("X-Token", "595a6e93-bddb-47af-a7ce-e63801315fd9");
// Headers headers = Headers.of(map);
// Observable<T> observable = (Observable<T>) HTTPHelper.getInstance().init(Constant.BASE_PATH, INetInterface.class, headers).getRecommendDetails(assetId);
Observable<WeatherResponse> observable = HTTPHelper.getInstance().init(Constant.BASE_PATH, INetInterface.class, map).getWeather(cityId);
return HTTPHelper.getInstance().doRequest(observable, resultType, listener);
}
}
此類是對第二步接口類的實現,具體接口得實現是在
HTTPHelper.getInstance().init(Constant.BASE_PATH, INetInterface.class)
方法中操作,只需要講第二步中的接口得class對象傳入即可。
HTTPHelper.getInstance().doRequest(observable, resultType, listener)
此方法返回Subscriber對象,可以用此對象來中斷網絡操作,比如在界面銷毀時中斷。
Activity或者Fragment或者其他業務中的使用
比如demo中的點擊事件中,直接調用上一步的接口實現類的方法,并傳遞對應參數。
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG,"onClick");
HttpRequest.getInstance().getWeather("101010300.html",CODE,MainActivity.this);
}
});
總結
三步實現網絡請求
1.實現ResultSubscriber.OnResultListener監聽
2.實現對應網絡請求的接口類
3.對接口類進行實現
4.由于library不能從BuildConfig中讀取Debug狀態,如果調試期間需要打印log日志,
可在Application中添加AppFrame.initDebug(true)方法
HTTPHelper類中的初始化方法如下
<T extends IModel> Subscriber doRequest(<any> observable, int resultType, ResultSubscriber.OnResultListener listener)
初始化觀察者
static HTTPHelper getInstance()
獲取單例對象
Interceptor getInterceptor()
獲取攔截器
<I> I init(String baseUrl, Class<I> clazz)
初始化
<I> I init(String baseUrl, Class<I> clazz, Headers headers)
<I> I init(String baseUrl, Class<I> clazz, long timeOut)
初始化
<I> I init(String baseUrl, Class<I> clazz, long timeOut, Headers headers)
HTTPHelper setInterceptor(Interceptor mInterceptor)
設置攔截器
Glide圖片工具類使用方法及說明
static void initImageIcon(int id)
初始化默認的加載圖
static void into(android.content.Context context, File file, android.widget.ImageView view)
glide 從文件中加載圖片
static void into(android.content.Context context, File file, android.widget.ImageView view, int width, int height)
glide 通過指定的大小從文件中加載圖片
static void into(android.content.Context context, int resourceId, android.widget.ImageView view)
glide 從資源ID中加載圖片
static void into(android.content.Context context, int resourceId, android.widget.ImageView view, int width, int height)
glide 通過指定的大小從資源ID中加載圖片
static void into(android.content.Context context, String url, android.widget.ImageView view)
glide 從字符串中加載圖片(網絡地址或者本地地址)
static void into(android.content.Context context, String url, android.widget.ImageView view, int defaultId)
glide 從字符串中加載圖片(網絡地址或者本地地址),
static void into(android.content.Context context, String url, android.widget.ImageView view, int width, int height)
glide 通過指定的大小從字符串中加載圖片(網絡地址或者本地地址)
static void into(android.content.Context context, android.net.Uri uri, android.widget.ImageView view)
glide 從URI中加載圖片
static void into(android.content.Context context, android.net.Uri uri, android.widget.ImageView view, int width, int height)
glide 通過指定的大小從Uri中加載圖片
static void intoBlur(android.content.Context context, String url, android.widget.ImageView view)
高斯模糊圖片處理
static void intoDefault(android.content.Context context, int id, android.widget.ImageView view)
默認glide,不做任何處理
static void intoDefault(android.content.Context context, String url, android.widget.ImageView view)
默認glide,不做任何處理
static void intoRound(android.content.Context context, int id, int radius, android.widget.ImageView view)
圓或者圓角圖片處理
static void intoRound(android.content.Context context, String url, int radius, android.widget.ImageView view)
圓或者圓角圖片處理
static void intoRound(android.content.Context context, String url, int radius, android.widget.ImageView view, int defaultId)
從字符串中加載圓形圖片(網絡地址或者本地地址)
數據庫處理方法
數據庫為抽取的 xUtils 3.0 框架.
詳細了解請訪問:xUtils 3.0
關于作者--起猿
Email:496121717@qq.com, lzp4796121717@gmail.com
有任何建議或者使用中遇到問題都可以給我發郵件, 你也可以加入QQ群:163411187技術交流,idea分享。
License
Copyright 2013 Square, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied.
See the License for the specific language governing permissions and limitations
under the License.