依赖
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:26.+'
java8要在android里加
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
applicationId "com.example.lx_20171103"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
jackOptions {
enabled true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions{
//设置JDK1.8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
一定要加网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Api类
public class Api {
public static final String BASE_PATH = "http://m.yunifang.com/";
// public static final String BASE_URL = "https://api.github.com/";
// public static final String HOME_URL="http://api.expoon.com/AppNews/getNewsList/";
}
ApiService
public interface ApiService {
/**
* 结合Retrofit+RxJava
* http://service.meiyinkeqiu.com/service/ads/cptj
* @param
* @return
*/
@GET("yunifang/mobile/home")
rx.Observable<News> getNoParams();
}
News类是一个Bean类
MainActivity主页面
public class MainActivity extends AppCompatActivity {
private RecyclerView recycler;
private TextView mtv;
private ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// mtv = (TextView) findViewById(R.id.tv);
recycler = (RecyclerView) findViewById(R.id.recycler);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this);
recycler.setLayoutManager(linearLayoutManager);
getNoParams();
}
private void getNoParams() {
//创建Retrofit
Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_PATH).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
//通过动态代理得到网络接口对象
apiService = retrofit.create(ApiService.class);
//得到Observable
Observable<News> observable = apiService.getNoParams();//获取数据源
Subscription subscribe = 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.DataBean.DefaultGoodsListBean> ads = news.data.defaultGoodsList;
Myadapter myadapter = new Myadapter(MainActivity.this, ads);
recycler.setAdapter(myadapter);
}
});
}
}
Myadapter 类
public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder> {
private Context context;
private List<News.DataBean.DefaultGoodsListBean> list;
private final ImageLoader loader;
public Myadapter(Context context, List<News.DataBean.DefaultGoodsListBean> list) {
this.context = context;
this.list = list;
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(context);
loader = ImageLoader.getInstance();
loader.init(configuration);
}
@Override
public Myadapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(Myadapter.ViewHolder holder, int position) {
holder.name.setText(list.get(position).goods_name);
loader.displayImage(list.get(position).goods_img,holder.img);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView name;
public ImageView img;
public ViewHolder(View itemView) {
super(itemView);
name=itemView.findViewById(R.id.good_name);
img=itemView.findViewById(R.id.img);
}
}
}
//主页面布局
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler"></android.support.v7.widget.RecyclerView>
//adapter类布局
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/good_name"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/img"/>