`
hzy3774
  • 浏览: 992924 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Android网络请求框架Retrofit使用笔记

 
阅读更多

Retrofit是一个安卓端开源网络请求库,目前依赖于okhttp:

http://square.github.io/retrofit/

并提供了多种数据转换工厂和RxJava适配工厂接口。例如:

compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'

 使用retrofit访问接口:

void test0() {
        //创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        GithubService service = retrofit.create(GithubService.class);

        service.getContributors("square", "retrofit").enqueue(
                new Callback<List<ContributorBean>>() {
                    @Override
                    public void onResponse(Call<List<ContributorBean>> call
                            , Response<List<ContributorBean>> response) {
                        for (ContributorBean con : response.body()) {
                            Log.e("TAG", con.login);
                        }
                    }

                    @Override
                    public void onFailure(Call<List<ContributorBean>> call
                            , Throwable t) {
                        t.printStackTrace();
                    }
                });
    }

    interface GithubService {

        //https://api.github.com/repos/{owner}/{repo}/contributors
        @GET("/repos/{owner}/{repo}/contributors")
        Call<List<ContributorBean>> getContributors(
                @Path("owner") String owner,
                @Path("repo") String repo);
    }

    class ContributorBean {
        String login;
        String type;
    }

 演示了一个带参Get请求,使用Gson做json数据转换。

若要加入RxJava来做事件处理:

void test0() {
        //创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        GithubService service = retrofit.create(GithubService.class);
        service.getContributors("square", "retrofit")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<List<ContributorBean>>() {
                    @Override
                    public void call(List<ContributorBean> contributorBeans) {
                        for (ContributorBean con : contributorBeans) {
                            Log.e("TAG", con.login);
                        }
                    }
                });
    }

    interface GithubService {

        //https://api.github.com/repos/{owner}/{repo}/contributors
        @GET("/repos/{owner}/{repo}/contributors")
        Observable<List<ContributorBean>> getContributors(
                @Path("owner") String owner,
                @Path("repo") String repo);
    }

    class ContributorBean {
        String login;
        String type;
    }

 产生了同样的效果。

 

使用flatMap实现链式调用:访问接口1->接口1返回后->访问接口2->接口2返回

void test0() {
        //创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        final GithubService service = retrofit.create(GithubService.class);
        service.getContributors("square", "retrofit")
                .flatMap(new Func1<List<ContributorBean>, Observable<List<EventBean>>>() {
                    @Override
                    public Observable<List<EventBean>> call(List<ContributorBean> contributorBeans) {
                        for (ContributorBean con : contributorBeans) {
                            Log.e("TAG", con.login);
                        }
                        return service.getEvents();
                    }
                }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<List<EventBean>>() {
                    @Override
                    public void call(List<EventBean> eventBeans) {
                        for (EventBean eve : eventBeans) {
                            Log.e("TAG", eve.created_at);
                        }
                    }
                });
    }

    interface GithubService {

        //https://api.github.com/repos/{owner}/{repo}/contributors
        @GET("/repos/{owner}/{repo}/contributors")
        Observable<List<ContributorBean>> getContributors(
                @Path("owner") String owner,
                @Path("repo") String repo);

        //https://api.github.com/events
        @GET("events")
        Observable<List<EventBean>> getEvents();
    }

    class EventBean {
        String id;
        String type;
        String created_at;
    }

    class ContributorBean {
        String login;
        String type;
    }

 

 

 

 

 

结束

分享到:
评论
1 楼 xkb281 2016-08-29  
简单易懂  不像有的文章 介绍一大堆没整明白是什么地下 赞一个

相关推荐

    AndroidNote, Android 进阶笔记,包含常用的技术框架、博客社区、书籍等。.zip

    2. **Retrofit**:由Square公司开发的网络请求库,简化了网络API的调用。 3. **Dagger**:Google支持的依赖注入框架,用于减少代码间的耦合。 4. **Butter Knife**:视图注入库,简化了UI组件的绑定操作。 5. ** ...

    Android群英传笔记

    笔记可能涵盖HTTP请求库如OkHttp的使用,JSON解析库如Gson或Jackson的应用,以及如何处理异步任务和线程管理,比如使用AsyncTask或Retrofit。 此外,权限管理在Android系统中至关重要,尤其是从Android 6.0(API...

    Android开发笔记全集

    5. **网络通信**:Android应用常常需要与服务器交互,因此需要掌握HTTP/HTTPS请求,JSON解析,以及使用Retrofit、Volley等网络库。 6. **多线程**:Android主线程不能执行耗时操作,所以需要使用AsyncTask、...

    黑马Android基础笔记

    8. **网络编程**:在Android应用中,网络请求通常使用HttpURLConnection、OkHttp或Retrofit等库来实现。掌握异步请求、JSON解析和网络权限管理是进行网络通信的基础。 9. **Service与BroadcastReceiver**:Service...

    Android 系统知识总结+培训课程+笔记

    学习如何使用HttpURLConnection、OkHttp或者Retrofit等库进行网络请求,以及处理JSON或XML数据是必备技能。 八、数据库与存储 SQLite是Android内置的轻量级数据库,用于本地数据存储。理解SQL语句和如何操作SQLite...

    android 学习笔记(全全整理)

    6. **网络编程**:HTTP请求与响应,使用HttpURLConnection或OkHttp进行网络请求,理解JSON格式的数据解析,以及使用Retrofit和Volley等网络库进行更高效的数据交互。 7. **多线程**:理解Android主线程(UI线程)与...

    Android 开发实战经典课件笔记与课件Demo代码

    8. **网络编程**:涉及HTTP请求库的使用(如OkHttp、Retrofit),以及WebSocket、FTP等网络协议的应用。 9. **异步处理**:包括线程和Handler机制,以及使用AsyncTask、IntentService进行异步操作。 10. **组件间...

    Android开发教程笔记完全版.rar

    14. **第三方库集成**:许多优秀的第三方库如Glide(图片加载)、Retrofit(网络请求)、Butter Knife(视图绑定)等,可以极大地提高开发效率。 15. **单元测试与自动化测试**:学习JUnit、Espresso等工具进行应用...

    Android开发教程笔记完全版.zip

    通过Gradle,开发者可以轻松引入第三方库,如Glide(图片加载库)、Retrofit(网络请求库)和Butter Knife(视图绑定库)等,极大地提高了开发效率。 **测试和性能优化** Android Studio支持单元测试、仪器测试以及...

    Android开发教程笔记完全版

    另外,Android的异步网络调用框架,如Retrofit和Volley,也会被提及,它们可以简化网络请求的处理。 最后,你将学习到Android的测试和调试技巧,包括单元测试、UI测试和Monkey测试,这些都是确保应用质量的重要步骤...

    android 整理代码笔记

    这涉及到网络请求、JSON解析、HTTPS安全通信等技术,例如使用OkHttp或Retrofit库进行网络请求。 4. **Music_Test**: 这个文件名暗示了一个关于音乐播放的功能测试。在Android中,可以使用MediaPlayer类来播放音频...

    Android笔记

    Android提供了HttpURLConnection和OkHttp等库来实现网络请求,同时介绍了AsyncTask和Retrofit等工具用于后台数据交互。 `android_丰富你的程序.docx`可能讨论了如何通过添加额外功能和组件来提升应用的用户体验,...

    android开发教程笔记

    此外,Volley和Retrofit是常见的网络请求库,提供更便捷的异步处理和数据转换。近年来,随着WebSocket的普及,Android应用也能实现实时双向通信。 多媒体处理包括音频、视频和图像的处理。MediaStore API可用于访问...

    Android开发教程&笔记

    - Volley和Retrofit:更高级的网络请求库,简化API调用。 - AsyncTask和Handler:处理UI线程与后台线程的交互,避免ANR(Application Not Responding)。 7. **权限管理** - Android 6.0(API级别23)以后,运行...

    Android学习入门笔记.zip

    - Android社区有许多优秀的第三方库,如ButterKnife(视图绑定)、Dagger(依赖注入)、Retrofit(网络请求)、RxJava(异步处理)等,这些可以加速开发进程。 - 组件化开发有助于代码结构清晰,提高代码复用性和...

    android 学习笔记doc

    9. **网络编程**:Android应用可能需要访问网络资源,理解HTTP协议、使用OkHttp或Retrofit库进行网络请求,以及处理异步任务是必要的。 10. **BroadcastReceiver**:广播接收者用于监听系统或自定义广播事件,实现...

    Android开发教程笔记(完全版pdf)

    学习如何使用HttpURLConnection、OkHttp、Retrofit等库进行网络请求,以及处理JSON数据,是现代Android开发的必备技能。 九、权限管理 从Android 6.0(API级别23)开始,系统引入了运行时权限管理。开发者需要在...

Global site tag (gtag.js) - Google Analytics