刚学习Android的网络开发,记录起来,作个纪念。

资源:

retrofit2学习: http://square.github.io/retrofit/

RxJAVA学习: http://gank.io/post/560e15be2dca930e00da1083

使用Android Studio开发。

1. 配置build.gradle

compile 'com.squareup.retrofit2:retrofit:2.1.0'    compile 'com.squareup.retrofit2:converter-gson:2.1.0'    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'    compile 'io.reactivex:rxjava:1.1.3'    compile 'io.reactivex:rxandroid:1.1.0'

2.  后台服务代码(Python)

只为测试,写得比较简单.使用的是bottle轻量级服务框架

设置了一个记数器,每次请求,返回的数都将加1

import jsonfrom bottle import route, run @route('/app/v1/game/new')def new_game():    new_game.counter += 1    return json.dumps(["liuzhiliang" + str(new_game.counter)])if __name__ == '__main__':    # 定义记数器    new_game.counter = 0    # 运行服务    run(host='0.0.0.0', port=8421)

3. 设置接口

设置两种接口类型,一种是Call,使用retrofit2自带的处理,一种是rx.Observable, 使用RxJAVA调用方式。 需要注意的是,他们调的是同一个接口!

package com.example.jerome.chess;import java.util.List;import retrofit2.Call;import retrofit2.http.GET;import rx.Observable;/** * Created by jerome on 16/8/25. */public interface GameApi {    @GET("/app/v1/game/new")    Observable> newGame();    @GET("/app/v1/game/new")    Call> newGame1();}

4. 获取接口实现

数据统一使用Gson来转换。

public  static   T createService(String baseUrl, Class cls){        Retrofit retrofit = new Retrofit.Builder()                .baseUrl(baseUrl)                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //rxjava 时添加                .addConverterFactory(GsonConverterFactory.create())                .build();        return  retrofit.create(cls);    }

调用生成代码

GameApi service = createService(baseUrl, GameApi.class);

5. Call调用方式封装

public static  void RunCall(GameApi service){        service.newGame1().enqueue(                new Callback>(){                    @Override                    public void onResponse(Call> call, Response> response) {                        for(String a : response.body())                            System.out.println("Call: " +a);                    }                    @Override                    public void onFailure(Call> call, Throwable t) {                        System.out.println("1 error: " + t.getMessage());                    }                }        );    }

6. RxJAVA调用方式封装

public static  void RunRxJava(GameApi service){        service.newGame()        .subscribeOn(Schedulers.io())        .subscribe(new Subscriber>() {            @Override            public void onCompleted() {                System.out.println("onCompleted: ");            }            @Override            public void onError(Throwable e) {                System.out.println("onError:" + e.getMessage());            }            @Override            public void onNext(List strings) {                for (String a : strings)                    System.out.println("RXJAVA: " + a);            }        });    }

7. 测试函数

public static void main(String[] args){        String baseUrl = "http://127.0.0.1:8421/";        GameApi service = createService(baseUrl, GameApi.class);        for(int i = 0; i < 5; i++)            RunCall(service);        for(int i = 0; i < 5; i++)            RunRxJava(service);    }

8. 程序输出

Call: liuzhiliang5Call: liuzhiliang2Call: liuzhiliang1Call: liuzhiliang4RXJAVA: liuzhiliang6Call: liuzhiliang3onCompleted: RXJAVA: liuzhiliang7onCompleted: RXJAVA: liuzhiliang8onCompleted: RXJAVA: liuzhiliang9onCompleted: RXJAVA: liuzhiliang10onCompleted: Process finished with exit code 0




更多相关文章

  1. Android中界面实现全屏显示的两种方式
  2. Android 驱动之旅 第四章:在Android 系统中编写JNI 方法在应用程
  3. 一种绕过Android P对非SDK接口限制的简单方法
  4. Android笔记:Android后台接口教程一(从零开始学习Android后台接口)A
  5. Android 的广播机制和两种注册方式
  6. Android的几种通讯方式
  7. android进行主题切换不重启整个应用(style方式)
  8. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)
  9. Dagger2 在 Android 项目的正确使用方式【完整篇】

随机推荐

  1. Android(安卓)模糊搜索
  2. 记录需求-在Service中拍照
  3. Android中多线程下载列表实现
  4. android中的各类权限
  5. [置顶] Android(安卓)listview 部分布局
  6. Android开发者应该保持以下特质
  7. Android(安卓)chart、图表、条形图、饼图
  8. android 系统System UI Tuner大概讲解
  9. 飞凌干货丨OK-xx18 Android实时时钟框架
  10. 动态更改屏幕方向的简单例子(LANDSCAPE与