zoukankan      html  css  js  c++  java
  • Retrofit的通讯方式示例

    Retrofit有两种通讯方式,同步和异步

    异步方式:

     APIService req;
            req = RetrofitManager.getInstance().createReq(APIService.class);
            String deviceId=DeviceUtil.GetDeviceId(context);
            Call<ResponseBody> res= req.getCpDatas(GetBaoCanReqPara(deviceId,fromId));
            res.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    Log.e("", "");
                    try {

    同步方式:

    APIService req;
    req = RetrofitManager.getInstance().createReq(APIService.class);
    try{
           Call<ResponseBody> res= req.CheckSignState(hashMap);
           final Response<ResponseBody> execute = res.execute();
           String json=execute.body().string();

    封装类库:

    import java.util.concurrent.TimeUnit;
    
    import okhttp3.OkHttpClient;
    import okhttp3.logging.HttpLoggingInterceptor;
    import retrofit2.GsonConverterFactory;
    import retrofit2.Retrofit;
    import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
    
    public class RetrofitManager {
        private static RetrofitManager mRetrofitManager;
        private Retrofit mRetrofit;
    
        private RetrofitManager(){
            initRetrofit();
        }
    
        public static synchronized RetrofitManager getInstance(){
            if (mRetrofitManager == null){
                mRetrofitManager = new RetrofitManager();
            }
            return mRetrofitManager;
        }
    
    
        private void initRetrofit() {
            HttpLoggingInterceptor LoginInterceptor = new HttpLoggingInterceptor();
            LoginInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
    
    
            if (AppConfig.DEBUG){
                builder.addInterceptor(LoginInterceptor); //添加retrofit日志打印
            }
    
    
            builder.connectTimeout(15, TimeUnit.SECONDS);
            builder.readTimeout(20, TimeUnit.SECONDS);
            builder.writeTimeout(20, TimeUnit.SECONDS);
            builder.retryOnConnectionFailure(true);
            OkHttpClient client = builder.build();
    
            mRetrofit = new Retrofit.Builder()
                    .baseUrl(AppConfig.BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//用于返回Rxjava调用,非必须
                    .client(client)
                    .build();
        }
    
        public <T> T createReq(Class<T> reqServer){
            return mRetrofit.create(reqServer);
        }
    }
  • 相关阅读:
    PHP+MYSQL单例模式的滑铁卢
    碰到一个安装SQl2008 Express Edition出错的怪异情况
    用虚拟并口解决向USB条码打印机发送ZPL指令的解决方案
    让excanvas支持动态创建的canvas标签(附演示文件)
    sql 检索语句
    c++ string 类基本用法样例
    Sqlite c/c++ api 学习
    最常见的20种VC++编译错误信息
    C#动态调用C++编写的DLL函数
    C++中将BYTE转16进制字符串
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/10120769.html
Copyright © 2011-2022 走看看