Android 網路開源庫之Retrofit
當前的網路開源庫有許多,如volley,okhttp,retrofit等,這三個庫當前是比較火的,其中,okhttp和retrofit由square團隊開發。關於這三個庫的區別,請移步stackoverflow或者知乎檢視。開發過程中選擇什麼樣的開源庫需要更具我們APP來做出選擇。我們選出stackoverflow中的一段話來看下。
上面說,需要與web service通訊的時候,我們使用retrofit。百度百科 web service介紹,那麼我們見天就來了解下retrofit。
什麼是retrofit
關於什麼是retrofit,官網文件上們有一句話。A type-safe HTTP client for Android and Java。額,似乎什麼也看出去來,就知道是一個型別安全的http client庫。那麼什麼是型別安全呢?型別安全程式碼指訪問被授權可以訪問的記憶體位置。例如,型別安全程式碼不能從其他物件的私有欄位讀取值。它只從定義完善的允許方式訪問型別才能讀取。型別安全的程式碼具備定義良好的資料型別。更多內容百度百科-型別安全,關於這裡還引用上面知乎的一句話。
網路訪問框架經過了從使用最原始的AsyncTask構建簡單的網路訪問框架(甚至不能稱為框架),後來使用開源的Android-async-http庫,再到使用google釋出的volley庫,一直不懈的尋找更好的解決方案(銀彈),到現在雖然銀彈沒找到,也算找 到了一些更好的方案,在這裡做些記錄,也做共享。
目標架構如下圖:
Retrofit:Square提供的開源產品,為Android平臺的應用提供一個型別安全的REST客戶端
- https://github.com/square/retrofit
RxAndroid:響應式程式設計框架RxJava針對Android平臺的擴充套件。
- https://github.com/ReactiveX/RxAndroid
- https://github.com/ReactiveX/RxJava
Dagger2:依賴注入(或叫ioc,用過spring的都知道這東東)框架,用於解耦的。
- https://github.com/google/dagger/
前序:看到網上大牛的介紹上面這三個框架,自己也試著折騰折騰
以下示例通過 http://ip.taobao.com/service/getIpInfo.php?ip=21.22.11.33 獲取json資料。
先看看廬山真面目,大家看了也會說,醬紫啊,搜森破!
1、通過配置gradle配置將Retrofit框架引入專案。
- compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
- compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
2、編寫API服務程式碼
- package com.micky.retrofitrxandroiddagger2.data.api;
- import com.micky.retrofitrxandroiddagger2.data.api.response.GetIpInfoResponse;
- import retrofit.Call;
- import retrofit.http.GET;
- import retrofit.http.Query;
- import rx.Observable;
- /**
- * @Project retrofitrxandroiddagger2
- * @Packate com.micky.retrofitrxandroiddagger2.data.api
- * @Description
- * @Author Micky Liu
- * @Email [email protected]
- * @Date 2015-12-21 17:22
- * @Version 1.0
- */
- publicinterface ApiService {
- @GET("service/getIpInfo.php")
- Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);
- }
3、定義接收資料的response
- package com.micky.retrofitrxandroiddagger2.data.api.response;
- import com.micky.retrofitrxandroiddagger2.data.api.model.IpInfo;
- /**
- * @Project CommonProject
- * @Packate com.micky.commonproject.data.api.response
- * @Description
- * @Author Micky Liu
- * @Email [email protected]
- * @Date 2015-12-21 16:39
- * @Version 1.0
- */
- publicclass GetIpInfoResponse extends BaseResponse {
- public IpInfo data;
- }
4、請求資料並顯示
- package com.micky.retrofitrxandroiddagger2;
- import android.os.Bundle;
- import android.support.design.widget.FloatingActionButton;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.Toolbar;
- import android.view.View;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.micky.retrofitrxandroiddagger2.common.utils.CrashHandler;
- import com.micky.retrofitrxandroiddagger2.data.api.ApiService;
- import com.micky.retrofitrxandroiddagger2.data.api.response.GetIpInfoResponse;
- import retrofit.Call;
- import retrofit.Callback;
- import retrofit.GsonConverterFactory;
- import retrofit.Response;
- import retrofit.Retrofit;
- import retrofit.RxJavaCallAdapterFactory;
- import rx.Subscriber;
- import rx.android.schedulers.AndroidSchedulers;
- import rx.functions.Action1;
- import rx.schedulers.Schedulers;
- /**
- * @Project retrofitrxandroiddagger2
- * @Packate com.micky.retrofitrxandroiddagger2
- * @Description
- * @Author Micky Liu
- * @Email [email protected]
- * @Date 2015-12-21 17:35
- * @Version 1.0
- */
- publicclass MainActivity extends AppCompatActivity {
- privatestaticfinal String ENDPOINT = "http://ip.taobao.com";
- private TextView mTvContent;
- private ProgressBar mProgressBar;
- @Override
- protectedvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
- mTvContent = (TextView) findViewById(R.id.tv_content);
- mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
- FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
- fab.setOnClickListener(new View.OnClickListener() {
- @Override
- publicvoid onClick(View view) {
- Retrofit retrofit = new Retrofit.Builder()
- .baseUrl(ENDPOINT)
- .addConverterFactory(GsonConverterFactory.create())
- .build();
- ApiService apiService = retrofit.create(ApiService.class);
- mProgressBar.setVisibility(View.VISIBLE);
- Call<GetIpInfoResponse> call = apiService.getIpInfo("63.223.108.42");
- call.enqueue(new Callback<GetIpInfoResponse>() {
- @Override
- publicvoid onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
- mProgressBar.setVisibility(View.GONE);
- GetIpInfoResponse getIpInfoResponse = response.body();
- mTvContent.setText(getIpInfoResponse.data.country);
- }
- @Override
- publicvoid onFailure(Throwable t) {
- mProgressBar.setVisibility(View.GONE);
- mTvContent.setText(t.getMessage());
- }
- });
- }
- });
- }
- @Override
- publicboolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_main, menu);
- returntrue;
- }
- @Override
- publicboolean onOptionsItemSelected(MenuItem item) {
- int id = item.getItemId();
- if (id == R.id.action_settings) {
- returntrue;
- }
- returnsuper.onOptionsItemSelected(item);
- }
- }
就這麼簡單,上述程式碼已經實現通過retrofit訪問restful api獲取資料並顯示。
下載地址:http://download.csdn.net/my
相關推薦
Android 網路開源庫之Retrofit
當前的網路開源庫有許多,如volley,okhttp,retrofit等,這三個庫當前是比較火的,其中,okhttp和retrofit由square團隊開發。關於這三個庫的區別,請移步stackoverflow或者知乎檢視。開發過程中選擇什麼樣的開源庫需要更具
Android網路開源庫-Retrofit(三) 批量上傳及上傳進度監聽
由於gif圖太大的原因,我將圖放在了github,如果部落格中顯示不出來圖,傳送門 由於我是事先寫在md上的,導致程式碼的可讀性差,大家將就著看吧。 1. 前言 在上一篇部落格中,我們介紹了Retrofit的檔案上傳,檔案下載以及進度監聽,這篇部落格
Android網路開源庫-Retrofit(二) 檔案上傳、下載及進度監聽
1.寫在前面的話 首先說明,我還沒太搞懂retrofit,目前,這篇部落格只能給出這幾個內容。 檔案上傳 檔案下載 檔案下載的進度監聽 還有這兩點沒弄好, 多檔案一次上傳 (批量上傳) 檔案上傳進度監聽 當前使用版本 compile 'com
Retrofit網路開源庫
網路開源庫有很多,不過目前最為流行或者用到最多有三個volley、okhttp、retrofit不過博主個人感覺xutil也挺好的(具體用法我會在微信中推廣) 廢話不多說先上原始碼 原始碼連結 點選開啟連結 gith
Android技能樹 — 網路小結(7)之 Retrofit原始碼詳細解析
前言: 哈哈,其實寫的還是很水,各位原諒我O(∩_∩)O。 介於自己的網路方面知識爛的一塌糊塗,所以準備寫相關網路的文章,但是考慮全部寫在一篇太長了,所以分開寫,希望大家能仔細看,最好可以指出我的錯誤,讓我也能糾正。 1.講解相關的整個網路體系結構: Android技能樹 — 網路小結(1)之網路體系
Android開源庫之使用ZXing開源庫生成二維碼及識別本地二維碼圖片
/** * 解析二維碼(使用解析RGB編碼資料的方式) * * @param path * @return */ public static Result decodeBarcodeRGB(String path) { if (Text
Android Viewpager開源庫
常見ViewPager 開源庫 名字 介紹 圖片 SwipeCardsView Android高仿秒拍熱榜的卡片滑動和左右飛出效果 image SCViewPag
Android常用開源庫的使用——————————————LitePal的使用方法
LitePal是一款開源Android資料庫框架,採用了物件關係對映的模式, 詳細的使用文件見LitePal專案的Github主頁 快速設定步驟: 1. Include library Edit your build.gradle file and add below dependency. If
Android常用開源庫———————————OkHttp的使用方法
OkHttp是一個優秀的網路通訊庫,GitHub專案主頁地址。 基本使用 在專案中中新增OkHttp庫的依賴。. implementation("com.squareup.okhttp3:okhttp:3.12.0") OkHttp進行Get請求 //
開源庫之EventBus使用詳解
簡介 EventBus是一種用於Android的釋出/訂閱事件匯流排。簡化了應用程式內各元件間、元件與後臺執行緒間的通訊。常用於Activity、Fragment和後臺Service之間通訊、傳
Android入門開源專案之仿開眼視訊APP
開眼短視訊(OpenEyes) 仿照(開眼視訊)Android端(舊版UI,新版UI已改變)做的一個App,每天更新一個精美短視訊應用,一個非常美的短視訊應用,UI介面基本上是參照開眼視訊Android端來做的。 在該專案中,我採用的是Vitamio的視訊播放器框架
定製開源庫之jar包和.so的引用
定製開源庫很多時候只是程式碼的開源,這次的要求是把jar包和.so檔案都放到庫裡,中間的過程還是有點曲折的。 首先我找到的是: 優雅的釋出Android開源庫(論JitPack的優越性) 本來我是按照這
Android常用開源庫專案,種類齊全,覆蓋面廣
宣告: 眾多開源庫出現的目的是為了不重複造輪子! 真正的高手切記,知其然,知其所以然!多花點時間,找主流的開源庫研究原始碼,成長更大!從中窺探掌握本質的技術和原理,萬變不離其宗! 推薦理由: 這份
C++跨平臺開源庫 之三
本篇文章主要介紹了”C++開源庫集合 “,主要涉及到C++開源庫集合 方面的內容,對於C++開源庫集合 感興趣的同學可以參考一下。 mimetic A free/GPL C++ MIME Library mimetic is a free/GPL Email library (MIME) w
C++跨平臺開源庫 之二
值得學習的C/C++語言開源專案 (1)ACE 龐大、複雜,適合大型專案。開源、免費,不依賴第三方庫,支援跨平臺。 (2)Asio Asio基於Boost開發的非同步IO庫,封裝了Socket,簡化基於socket程式的開發。 開源、免費,支援跨平臺。 (3)POCO POCO C++ Libr
Android 網路獲取資料之Json解析
1.簡介 JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。 JSON資料作為目前網路中主流的資料傳輸格式之一,應用十分廣泛。 2. Json資料格式(兩種) Json資料有兩種格式: (1)物件 :物件表示
Android網路開發回顧之旅 ① 在Android手機整合使用MQTT協議 ,實現搞掂移動控制硬體端。(附帶Demo)
一、認識MQTT協議。 如果你對MQTT協議的連線過程不熟悉,那沒關係;請看我前面的8266硬體上介紹的MQTT介紹 ,其實也沒啥難,這個MQTT的好處是短小,資訊傳遞快捷 ,適合在
Android材料設計庫之摺疊式佈局你應該知道的一切
github原始碼地址:https://github.com/geduo83/AndroidMaterialDesign/tree/master/module_drawerlayout_coordinatorlayout 在Android5.0之後,Android給我們提供了非常豐富關於UI
Android 使用開源庫StickyGridHeaders來實現帶sections和headers的GridView顯示本地圖片效果
大家好!過完年回來到現在差不多一個月沒寫文章了,一是覺得不知道寫哪些方面的文章,沒有好的題材來寫,二是因為自己的一些私事給耽誤了,所以過完年的第一篇文章到現在才發表出來,2014年我還是會繼續在CSDN上面更新我的部落格,歡迎大家關注一下,今天這篇文章主要的是介紹下開源庫St
Android第三方開源庫:PopupWindow相關
MultiSelectPopWindow 效果圖 gradle allprojects { repositories { jcenter()