Android中Retrofit的封裝使用
一、大致介紹:
-
Retrofit:Square 基於OkHttp 實現的一款針對Android 網路請求的框架
-
OkHttp: Square 開源的網路請求庫
-
RxJava:使得非同步操作變得非常簡單
二、功能分離
-
Retrofit 針對請求的資料和請求的結果,使用介面的方式呈現
-
OkHttp 針對請求的過程
-
RxJava 針對非同步,各種執行緒之間的切換
三、使用過程
一、新增依賴庫
//RxJava
compile 'io.reactivex:rxjava:1.1.3'
//RxAndroid
compile 'io.reactivex:rxandroid:1.1.0'
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.0.0'
//retrofit依賴Gson
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
//OkHttp
compile 'com.squareup.okhttp3:okhttp:3.2.0'
//retrofit依賴RxJava
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
二、建立單例Retrofit介面管理類
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitManager {
// 請求的URL字首
private static final String BASEURL = "http://192.168.42.48:9000/";
private static Retrofit retrofit;
private static RetrofitManager retrofitManager;
//提供共有的方法供外界訪問
public static RetrofitManager newInstance() {
if (retrofitManager == null) {
synchronized (RetrofitManager.class) {
retrofitManager = new RetrofitManager();
}
}
return retrofitManager;
}
//通過動態代理生成相應的Http請求
public <T> T creat(Class<T> t) {
return retrofit.create(t);
}
//構造方法私有化
private RetrofitManager() {
retrofit = getRetrofit();
}
//構建Ok請求
private OkHttpClient getOkHttpClient() {
return new OkHttpClient.Builder()
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.build();
}
//構建Retrofit
private Retrofit getRetrofit() {
return new Retrofit.Builder()
.baseUrl(BASEURL)
.client(getOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
// .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
}
三、建立介面類
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
// 對應著服務端的介面
public interface UserService {
// 如果後端是@RequestParam接受引數,加上@FormUrlEncoded
@FormUrlEncoded
// 請求路徑前不能加 /
@POST("server/user/login")
Call<Rs<User>> login(@Field("username") String username, @Field("password") String password);
//如果後端是@RequestBody接受引數,去除@FormUrlEncoded
@POST("server/user/register")
Call<Rs> register(@Body User user);
// 使用resultful風格請求
@GET("server/user/getById/{id}")
Call<Rs<User>> getById(@Path("id") String id);
@POST("server/user/updateById")
Call<Rs> updateById(@Body User user);
}
四、呼叫過程
// 呼叫註冊介面除錯介面
RetrofitManager.newInstance()
.creat(UserService.class)
.login(username,password)
.enqueue(new Callback<Rs<User>>() {
@Override
public void onResponse(Call<Rs<User>> call, Response<Rs<User>> response) {
LogUtils.i("呼叫介面成功");
if (response.body().getCode() == 20000){
Gson gson = new Gson();
String json = gson.toJson(response.body().getData());
System.out.println(json);
SPUtils.getInstance().put("user",json);
ToastUtils.showShort("成功!");
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
} else {
ToastUtils.showShort("異常!");
}
}
@Override
public void onFailure(Call<Rs<User>> call, Throwable t) {
LogUtils.e("呼叫介面異常");
ToastUtils.showShort("異常!");
}
});
相關文章
- Retrofit的簡單封裝封裝
- Kotlin中Retrofit與RxJava的簡單封裝KotlinRxJava封裝
- Android實現Rxjava2+Retrofit完美封裝AndroidRxJava封裝
- Android Retrofit的使用Android
- Kotlin中Retrofit網路請求簡單封裝Kotlin封裝
- 【Android架構】基於MVP模式的Retrofit2+RXjava封裝(一)Android架構MVP模式RxJava封裝
- retrofit如何配合Rxjava封裝程式碼RxJava封裝
- Android RxJava系列三: 與Retrofit2結合使用和封AndroidRxJava
- Retrofit+Rxjava網路層的優雅封裝RxJava封裝
- 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之多Url(七)Android架構MVP模式RxJava封裝
- Android RxJava+Retrofit完美封裝(快取,請求,生命週期管理)AndroidRxJava封裝快取
- Retrofit2/Rxkotlin網路請求的封裝Kotlin封裝
- vue中axios的使用與封裝VueiOS封裝
- Android Retrofit原始碼解析:都能看懂的Retrofit使用詳解Android原始碼
- Android基於Retrofit2.0+RxJava 封裝的超好用的RetrofitClient工具類(完美結合RxJava)(六)...AndroidRxJava封裝client
- 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之檔案下載(二)Android架構MVP模式RxJava封裝
- 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之檔案上傳(三)Android架構MVP模式RxJava封裝
- 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之常見問題(四)Android架構MVP模式RxJava封裝
- 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之斷點下載(五)Android架構MVP模式RxJava封裝斷點
- .net 中的 Dto 引數封裝物件 使用封裝物件
- Retrofit + Kotlin + MVVM 的網路請求框架的封裝嘗試KotlinMVVM框架封裝
- Android中Retrofit框架的基礎使用(請求資料並解析)Android框架
- Retrofit+okhttp+Rxjava封裝網路請求工具類HTTPRxJava封裝
- RxJava+Retrofit+OkHttp 深入淺出-終極封裝一RxJavaHTTP封裝
- MVP實戰心得---封裝Retrofit2.0+RxAndroid+RxBusMVP封裝Android
- Android 網路框架Retrofit的使用和解析Android框架
- 【Android架構】基於MVP模式的Retrofit2+RXjava封裝之資料預處理(六)Android架構MVP模式RxJava封裝
- Retrofit + RxJava + OkHttp 讓網路請求變的簡單-封裝篇RxJavaHTTP封裝
- 基於retrofit的網路框架的終極封裝(二)-與retrofit的對接與解耦,以及遇到的坑框架封裝解耦
- Android中RxJava+Retrofit2.0+MVP模式的整合AndroidRxJavaMVP模式
- 封裝redux中的createStore封裝Redux
- Retrofit中如何正確的使用https?HTTP
- Android Retrofit 2.5.0使用基礎詳解Android
- Android框架第(五)篇---Retrofit基本使用Android框架
- android Retrofit 2.0Android
- Android 封裝一個通用的PopupWindowAndroid封裝
- Android Logcat 封裝類AndroidGC封裝
- Vue Axios 的封裝使用VueiOS封裝