buildgradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.bewei.retrofitandjava"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
jackOptions {
enabled true
}
}
compileOptions{
//设置JDK1.8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.android.support:recyclerview-v7:21.0.+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
}
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
package com.bewei.retrofitandjava.inter;
import android.net.wifi.hotspot2.pps.HomeSp;
import com.bewei.retrofitandjava.bean.Datas;
import com.bewei.retrofitandjava.bean.Home;
import com.bewei.retrofitandjava.bean.Homes;
import com.bewei.retrofitandjava.bean.News;
import com.bewei.retrofitandjava.bean.User;
import java.util.List;
import retrofit2.http.GET;
import retrofit2.http.Path;
import rx.Observable;
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2017/11/2 13:27
*/
public interface ApiService {
/**
* 结合Retrofit+RxJava
* http://service.meiyinkeqiu.com/service/ads/cptj
* @param
* @return
*/
@GET("/service/ads/cptj")
Observable<News> getNoParams();
/**
* 结合RxJava
* @param user
* @return
* https://api.github.com/users/forever
*/
@GET("users/{user}")
Observable<User> getHasParams(@Path("user")String user);
//第三个接口,,兼容json解析功能,,集成rxjava square retrofit
//https://api.github.com/repos/square/retrofit/contributors
@GET("repos/{square}/{retrofit}/contributors")
Observable<List<Datas>> getHasParams2(@Path("square") String square, @Path("retrofit")String retrofit);
@GET("type/1/p/1")
Observable<Homes> getHomes();
}
package com.bewei.retrofitandjava.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.bewei.retrofitandjava.R;
import com.bewei.retrofitandjava.api.Api;
import com.bewei.retrofitandjava.bean.Datas;
import com.bewei.retrofitandjava.bean.Homes;
import com.bewei.retrofitandjava.bean.News;
import com.bewei.retrofitandjava.bean.User;
import com.bewei.retrofitandjava.inter.ApiService;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private LinearLayoutManager linearLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycleview);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
getNoParams();
// getHasParams();
// getHasParams2();
// gethome();
}
private void getHasParams2() {
//创建Retrofit
Retrofit retrofit = new Retrofit
.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//通过动态代理得到网络接口对象
ApiService apiService = retrofit.create(ApiService.class);
//得到Observable
Observable<List<Datas>> observable = apiService.getHasParams2("square", "retrofit");
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//添加flatMap操作符
.flatMap(new Func1<List<Datas>, Observable<Datas>>() {
@Override
public Observable<Datas> call(List<Datas> datases) {
return Observable.from(datases);
}
}).subscribe(new Subscriber<Datas>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.i("xxx", e.getMessage());
}
@Override
public void onNext(Datas datas) {
String avatar_url = datas.getAvatar_url();
Log.i("xxx", avatar_url);
}
});
}
private void gethome() {
//创建Retrofit
Retrofit retrofit = new Retrofit
.Builder()
.baseUrl(Api.HOME_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//通过动态代理得到网络接口对象
ApiService apiService = retrofit.create(ApiService.class);
Observable<Homes> homes = apiService.getHomes();
homes.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Homes>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Homes homes) {
Log.d("onNext", "onNext: " + homes.getData().get(0).getNews_title());
}
});
}
private void getHasParams() {
//创建Retrofit
Retrofit retrofit = new Retrofit
.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//通过动态代理得到网络接口对象
ApiService apiService = retrofit.create(ApiService.class);
//得到Observable
Observable<User> observable = apiService.getHasParams("forever");
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//添加map变换操作符
.map(new Func1<User, User>() {
@Override
public User call(User user) {
return user;
}
}).subscribe(new Subscriber<User>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(User user) {
//消费事件
String avatar_url = user.getAvatar_url();
Log.i("xxx", avatar_url);
}
});
}
//
private void getNoParams() {
//创建Retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_PATH)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//通过动态代理得到网络接口对象
//http://service.meiyinkeqiu.com/service/ads/cptj
//"http://service.meiyinkeqiu.com/service/"
// retrofit.create(ApiServices);
ApiService apiService = retrofit.create(ApiService.class);
//得到Observable
Observable<News> observable = apiService.getNoParams();//获取数据源
observable.subscribeOn(Schedulers.io())//IO线程做耗时操作
.observeOn(AndroidSchedulers.mainThread())//在主线程更新UI
.subscribe(new Observer<News>() {
//完成
@Override
public void onCompleted() {
Toast.makeText(MainActivity.this, "onCompleted", Toast.LENGTH_LONG).show();
Log.d("MainActivity", "onCompleted: ");
}
//异常
@Override
public void onError(Throwable e) {
Log.d("MainActivity", "onError: " + e.getMessage());
}
// 加载中
@Override
public void onNext(News news) {
Log.d("MainActivity", "onNext: ");
List<News.AdsBean> ads = new ArrayList<>();
news.ads = ads;
recyclerView.setAdapter(new MyAdapter(ads, MainActivity.this));
}
});
}
}