Retrofit+RxJava+lambda使用示例
废话不说先上Gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'me.tatarka:gradle-retrolambda:2.4.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } }
repositories { mavenCentral() maven { url "http://repo.maven.apache.org/maven2" } } apply plugin: 'com.android.application' apply plugin: 'retrolambda' android { compileSdkVersion 23 buildToolsVersion "23.0.2" compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } retrolambda { System.getenv("JAVA8_HOME") System.getenv("JAVA7_HOME") javaVersion JavaVersion.VERSION_1_7 } defaultConfig { applicationId "com.as.testkaixin" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.jakewharton:butterknife:7.0.1' }
2 导入包后首先是Retrofit同步模式访问网络
public static final String API_URL = "https://api.github.com"; public static class Contributor { public final String login; public final int contributions; public Contributor(int contributions, String login) { this.contributions = contributions; this.login = login; } } public interface GitHub{ @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> contributors (@Path("owner") String owner, @Path("repo") String repo); } public static void main(String... args) throws IOException { Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()).build(); GitHub gitHub = retrofit.create(GitHub.class); Call<List<Contributor>> call = gitHub.contributors("square", "retrofit"); List<Contributor> contributors = call.execute().body(); for (Contributor contributor : contributors) { System.out.println(contributor.login + " (" + contributor.contributions + ")"); } }
3 其次是Retrofit异步模式访问网络
public static final String API_URL = "https://api.github.com"; public static class Contributor { public final String login; public final int contributions; public Contributor(int contributions, String login) { this.contributions = contributions; this.login = login; } } public interface GitHub{ @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> contributors (@Path("owner") String owner, @Path("repo") String repo); } public static void main(String... args) throws IOException { Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()).build(); GitHub gitHub = retrofit.create(GitHub.class); Call<List<Contributor>> call = gitHub.contributors("square", "retrofit"); call.enqueue(new Callback<List<Contributor>>() { @Override public void onResponse(Response<List<Contributor>> response, Retrofit retrofit) { List<Contributor> contributors =response.body(); for (Contributor contributor : contributors) { System.out.println(contributor.login + " (" + contributor.contributions + ")"); } } @Override public void onFailure(Throwable t) { System.out.println("erro"); } }); }
4 最后是
Retrofit+RxJava+lambda
public static final String API_URL = "https://api.github.com"; public static class Contributor { public final String login; public final int contributions; public Contributor(int contributions, String login) { this.contributions = contributions; this.login = login; } } public interface GitHub{ @GET("/repos/{owner}/{repo}/contributors") Observable<List<Contributor>> contributors (@Path("owner") String owner, @Path("repo") String repo); } public static void main(String... args) throws IOException { Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); GitHub gitHub = retrofit.create(GitHub.class); Observable<List<Contributor>> observable = gitHub.contributors("square", "retrofit"); observable.subscribe(new Action1<List<Contributor>>() { @Override public void call(List<Contributor> contributors) { for (Contributor contributor : contributors) { System.out.println(contributor.login + " (" + contributor.contributions + ")"); } } }); System.out.println("================4lambda======================================"); observable.subscribe(contributors -> { for (Contributor contributor : contributors) { System.out.println(contributor.login + " (" + contributor.contributions + ")"); } }); System.out.println("================4lambda from======================================"); observable.subscribe(contributors -> { Observable.from(contributors) .subscribe(contributor -> System.out.println(contributor.login + " (" + contributor.contributions + ")")); }); System.out.println("================4lambda flat Map======================================"); observable.flatMap(contributors -> Observable.from(contributors)) .subscribe(contributor -> System.out.println(contributor.login + " (" + contributor.contributions + ")")); System.out.println("================4lambda filter======================================"); observable.flatMap(contributors -> Observable.from(contributors)) .filter(contributor -> contributor != null) .subscribe(contributor -> System.out.println(contributor.login + " (" + contributor.contributions + ")")); System.out.println("================4lambda get======================================"); observable.flatMap(contributors -> Observable.from(contributors)) .take(5) .subscribe(contributor -> System.out.println(contributor.login + " (" + contributor.contributions + ")")); System.out.println("================4lambda doOnNext======================================"); observable.flatMap(contributors -> Observable.from(contributors)) .doOnNext(contributor -> System.out.println("do someThing...."+contributor.getClass().toString()) ) .subscribe(contributor ->System.out.println(contributor.login + " (" + contributor.contributions + ")")); }