使用Retrofit和Rxjava对联网进行简单封装

<p>对于Android中的联网请求, 使用Retrofit能够统一 定义接口, 并对相同的操作进行封装</p><h2>添加所需的依赖和权限:</h2><div>新建一个项目,在根目录的build.gradle的dependencies节点中添加,用于注解<br /></div><div><span style="color: rgb(51, 51, 51); font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.8px; white-space: pre; background-color: rgb(248, 248, 248);">classpath </span><span class="hljs-string" style="box-sizing: border-box; outline: none; color: rgb(221, 17, 68); font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.8px; white-space: pre;">'com.neenbedankt.gradle.plugins:android-apt:1.8'</span><br /></div><div><span class="hljs-string" style="box-sizing: border-box; outline: none; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.8px; white-space: pre; background-color: rgb(248, 248, 248);"><span style="color:#333333;">如我的项目根目录:</span></span></div><div><span class="hljs-string" style="box-sizing: border-box; outline: none; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.8px; white-space: pre; background-color: rgb(248, 248, 248);"><span style="color:#333333;"></span></span><pre name="code" class="html">// Top-level build file where you can add configuration options common to all sub-projects/modules.


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        //用于注解
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath 'com.android.tools.build:gradle:2.2.3'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}


allprojects {
    repositories {
        jcenter()
    }
}


task clean(type: Delete) {
    delete rootProject.buildDir
}</pre><br /></div><div>主程序app module中build.gradle的第二行添加,用于注解</div><div>apply plugin: 'com.neenbedankt.android-apt'<br /></div><div><br /></div><div>dependencies节点中添加:</div><div>compile 'com.android.support:appcompat-v7:24.2.1'<br />compile 'com.android.support:design:24.2.1'<br />//布局注解<br />apt 'com.jakewharton:butterknife-compiler:8.0.1'<br />compile 'com.jakewharton:butterknife:8.0.1'<br />//响应式编程<br />compile 'io.reactivex:rxandroid:1.1.0'<br />compile 'io.reactivex:rxjava:1.1.0'<br />//联网类库<br />compile 'com.squareup.retrofit2:retrofit:2.1.0'<br />compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'<br />compile 'com.squareup.retrofit2:converter-scalars:2.1.0'<br />compile 'com.dou361.retrofit2:jjdxm-retrofit-converter-fastjson:1.0.0'<br />compile 'com.squareup.okhttp3:okhttp:3.3.0'<br /></div><div><br /></div><div>注意:这里使用的是fastJson用于处理返回的json数据, &nbsp;别忘了在清单文件中 添加 &nbsp;联网权限</div><div><br /></div><div><br /></div><div><h2>封装网络请求类</h2></div><div>1 &nbsp;网络接口请求服务类</div><div>&nbsp; &nbsp;&nbsp;<pre name="code" class="java">public interface IApiService {


    /** 查询历史的今天 */
    @GET(&quot;/japi/toh&quot;)
    Observable&lt;RepoHistory&gt; searchHistory(@QueryMap Map&lt;String, String&gt; map);


    /** 加载笑话列表 */
    @GET(&quot;/joke/content/list.from&quot;)
    Observable&lt;RepoJoke&gt; loadJoke(@QueryMap Map&lt;String, String&gt; map);
}</pre>2 网络请求接口基类</div><div><pre name="code" class="java">package com.example.mythinkmvp.api;


import com.dou361.retrofit2.converter.fastjson.FastJsonConverterFactory;


import java.util.concurrent.TimeUnit;


import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;


/**
 * Created by zmybi on 2017/2/13.
 * 网络请求接口基类
 * 传入参数 可以得到一个接口
 * 封装好连接超时,读取超时
 */


public class BaseApi {






    public static IApiService getIApiService(String ip) {
        return getService(ip);
    }




    public static IApiService getService(String ip) {
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(30, TimeUnit.SECONDS)
                .connectTimeout(30,TimeUnit.SECONDS)
                .build();


        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(ip)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(FastJsonConverterFactory.create())
                .build();
        return retrofit.create(IApiService.class);


    }
}
</pre>3 网络请求接口的工具类</div><div><pre name="code" class="java">package com.example.mythinkmvp.api;


import com.example.mythinkmvp.bean.Joke;
import com.example.mythinkmvp.bean.RepoHistory;


import java.util.HashMap;
import java.util.Map;


import rx.Observable;


/**
 * Created by zmybi on 2017/2/13.
 *
 * 网络接口请求的工具类
 */


public class ApiUtils extends BaseApi{


    public static final String BASE_HISTORY = &quot;http://api.juheapi.com/&quot;;   //历史记录的基本APi接口
    public static final String BASE_JOK = &quot;http://japi.juhe.cn/&quot;;   //历史记录的基本APi接口






    public static Observable&lt;RepoHistory&gt; getPoHistory(String month,String day) {
        IApiService iApiService = getIApiService(BASE_HISTORY);
        //将get请求后面的参数 进行封装
        Map&lt;String,String&gt; map = new HashMap&lt;&gt;();
        map.put(&quot;key&quot;, &quot;7ac7e02ff7f1f8f1ccdc2f9e5dddb6be&quot;);
        map.put(&quot;v&quot;, &quot;1.0&quot;);
        map.put(&quot;month&quot;, month);
        map.put(&quot;day&quot;, day);
        Observable&lt;RepoHistory&gt; history = iApiService.getRepoHistory(map);
        return history;
    }




    public static Observable&lt;Joke&gt; getJok(String page) {
        /**key=d796a03545bddee0b56d913111f5f199&amp;page=2&amp;pagesize=10&amp;sort=asc&amp;time=1418745237*/
        Map&lt;String, String&gt; map = new HashMap&lt;&gt;();
        map.put(&quot;key&quot;, &quot;d796a03545bddee0b56d913111f5f199&quot;);
        map.put(&quot;sort&quot;, &quot;asc&quot;);
        map.put(&quot;time&quot;, &quot;1418745237&quot;);
        map.put(&quot;page&quot;, page);
        map.put(&quot;pagesize&quot;, &quot;10&quot;);
        return getIApiService(BASE_JOK).getJok(map);
    }






}
</pre><br />则在开发中直接定义api包, &nbsp;将三个类,接口文件放入即可,直接在网络请求的工具类中定义接口 即可;<br /><br /></div><div><span class="hljs-string" style="box-sizing: border-box; outline: none; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 12.8px; white-space: pre; background-color: rgb(248, 248, 248);"><span style="color:#333333;"><br /></span></span></div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值