專案中快速搭建Retrofit
本篇部落格將和大家分享如何在專案中快速搭建Retrofit。關於Retrofit的基本使用方法網上的例子很多,大家可自行參考,這裡,我也給大家分享幾個比較好的入門文章,僅供參考:
https://gold.xitu.io/entry/579f1749a633bd006009eca4
首先要引入該庫:
今天的主題是和大家分享如何在專案中快速搭建一個Retrofit。首先我們知道,網路請求例項在App中都是以單例模式存在的。所以我們就需要建立一個網路請求工具類來封裝。
首先要引入該庫:
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0'
關於單例模式的寫法,相信大家都不陌生,單例模式的實現方式很多種:懶漢式,餓漢式,列舉,內部類等等。。這裡我就不一一詳細說明了。下面來看程式碼:
package com.example.song.retrofittest.model; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by Song on 2016/8/30. */ public class HttpUtils { private static Retrofit mRetrofit; private static volatile HttpUtils httpUtils; private HttpUtils() { mRetrofit = new Retrofit.Builder() .baseUrl("") .addConverterFactory(GsonConverterFactory.create()) .build(); } public static HttpUtils getInstance() { if(httpUtils == null) { synchronized (HttpUtils.class) { if(httpUtils == null) { httpUtils = new HttpUtils(); return httpUtils; } } } return httpUtils; }從上面程式碼我們看到:
(1)私有建構函式中,我們初始化了Retrofit。
(2)公開getInstance方法用來實現單例模式。
現在Retorfit初始化完了。就可以使用該物件來操作網路請求了。我們知道,Retrofit傳送請求需要使用create方法。來看下原始碼:
public <T> T create(final Class<T> service) { Utils.validateServiceInterface(service); if (validateEagerly) { eagerlyValidateMethods(service); } return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service }, new InvocationHandler() { private final Platform platform = Platform.get(); @Override public Object invoke(Object proxy, Method method, Object... args) throws Throwable { // If the method is a method from Object then defer to normal invocation. if (method.getDeclaringClass() == Object.class) { return method.invoke(this, args); } if (platform.isDefaultMethod(method)) { return platform.invokeDefaultMethod(method, service, proxy, args); } ServiceMethod serviceMethod = loadServiceMethod(method); OkHttpCall okHttpCall = new OkHttpCall<>(serviceMethod, args); return serviceMethod.callAdapter.adapt(okHttpCall); } }); }上面就是Retrofit的create方法的原始碼,大致可以看出,create方法使用了泛型來控制引數和返回引數的型別保持一致。細心的小夥伴肯定看到了Proxy.newProxyInstance()方和new InvocationHandler(){}!!沒錯,這不就是Java中的動態代理機制嗎!!!並且我們看到在invoke方法中,對method進行一些判斷並封裝成ServiceMethod方法,通過okhttpCall來傳送請求。
通過上面的分析,我們就需要公開一個create方法,下面來看程式碼:
public <T>T create(Class<T> cls) { return mRetrofit.create(cls); }可以看到,我們在create方法中,通過呼叫Retrofit例項的create方法來返回具體的請求服務例項。
這樣,一個Retrofit的網路請求封裝就完成了。在Activity中具體使用:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); LoadData loadData = HttpUtils.getInstance().create(LoadData.class); loadData.loadData("001"); } }ok,到這裡對Retorfit的封裝就完成了。分分鐘搞定Retrofit的整合使用!!
相關文章
- vue cli 快速搭建專案Vue
- Android專案框架搭建:mvp+retrofit+rxjava+rxbusAndroid框架MVPRxJava
- 快速搭建gulp專案實戰
- ? 使用 Dawn 快速搭建 React 專案!React
- MVP+Retrofit+Rxjava在專案中實戰解析MVPRxJava
- springBoot快速搭建啟動專案Spring Boot
- 快速搭建基於註解的 Dubbo 專案
- Spring Boot入門-快速搭建web專案Spring BootWeb
- Docker 快速搭建redmine 專案管理 BUG追蹤Docker專案管理
- Idea快速搭建一個springbootWeb專案IdeaSpring BootWeb
- springBoot快速搭建簡單的SSM專案Spring BootSSM
- 手把手教你mockjs實際專案快速搭建MockJS
- express中間層搭建前端專案3Express前端
- mvp+rxjava2+retrofit2專案框架demoMVPRxJava框架
- Spring boot入門(一):快速搭建Spring boot專案Spring Boot
- WIN7環境使用nodejs快速搭建web專案Win7NodeJSWeb
- 如何基於 Docker 快速搭建 Springboot + Mysql + Redis 專案DockerSpring BootMySqlRedis
- CRM中的專案管理:搭建CRM與專案一體化管理專案管理
- 在 Homestead 中搭建 ThinkPHP 專案記錄PHP
- 讓我的專案也使用RxJava+OkHttp+RetrofitRxJavaHTTP
- umi + dva + ant-design-mobile快速搭建H5專案H5
- 快速建立 Laravel 專案Laravel
- 微信公眾號快速開發(二)專案搭建與被動回覆
- vite + ts 快速搭建 vue3 專案 以及介紹相關特性ViteVue
- 【SSH】--框架搭建錯誤及專案中問題框架
- 使用gulp搭建專案
- Django專案搭建流程Django
- vue專案的搭建Vue
- webpack 搭建 vue 專案WebVue
- 搭建一個專案
- 看板工具Leangoo中,如何快速切換專案內看板?Go
- SAP顧問如何在GLOBAL 專案中快速提升自己?
- MVVM框架的搭建(二)——專案搭建MVVM框架
- gradle手工搭建java專案搭建GradleJava
- React專案模板-從專案搭建到部署React
- webpack快速構建專案Web
- 專案成本估算快速指南
- 快速熟悉專案程式碼