compile 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' implementation 'com.google.code.gson:gson:2.8.2' compile 'com.facebook.fresco:fresco:0.11.0' compile 'com.facebook.fresco:imagepipeline-okhttp3:0.11.0' compile 'com.squareup.retrofit2:retrofit:2.3.0' compile'com.squareup.retrofit2:converter-gson:2.3.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' compile 'com.jcodecraeer:xrecyclerview:1.3.2' ------------------------------------------------------------------
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xrv" android:layout_width="match_parent" android:layout_height="match_parent" ></com.jcodecraeer.xrecyclerview.XRecyclerView> </LinearLayout>
-----------------------------------------------------------------------------------------------------------
item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:orientation="vertical"> <TextView android:id="@+id/te" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="111111111111" /> <TextView android:id="@+id/te1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="22222222222222" /> </LinearLayout> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/sdv" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignParentRight="true" /> </RelativeLayout>
-----------------------------------------------------------------------------------------------------------------------
Bean.java
自己根据接口封装
------------------------------------------------------------------------------------------------------
IInterface.java
import io.reactivex.Observable; import okhttp3.ResponseBody; import panjiangang.bwie.com.day7.bean.Bean; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; import retrofit2.http.Query; /** * Created by lenovo on 2017/12/04. */ public interface IInterface { @GET("/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10") Call<ResponseBody> get(); @GET("/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10") Observable<Bean> get1();//@Path("user")String user @GET("/nba") Observable<Bean> get2(@Query("key") String user, @Query("num") int num); }
------------------------------------------------------------------------------------------------------------------------------------
MyAdapter.java
import android.content.Context; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.facebook.drawee.generic.RoundingParams; import com.facebook.drawee.view.SimpleDraweeView; import panjiangang.bwie.com.day7.bean.Bean; /** * Created by lenovo on 2017/12/05. */ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.myholder> { //两个参数 上下文,和数据源 Context context; Bean bean; public MyAdapter(Context context, Bean bean) { this.context = context; this.bean = bean; } @Override public myholder onCreateViewHolder(ViewGroup parent, int viewType) { //加载布局返回到holder View view = View.inflate(context, R.layout.item, null); myholder myholder = new myholder(view); return myholder; } @Override public void onBindViewHolder(myholder holder, int position) { Uri uri = Uri.parse(bean.getNewslist().get(position).getPicUrl()); RoundingParams roundingParams = RoundingParams.fromCornersRadius(5f); roundingParams.setRoundAsCircle(true); holder.img.getHierarchy().setRoundingParams(roundingParams); holder.img.setImageURI(uri); //设置控件 属性 holder.te.setText(bean.getNewslist().get(position).getTitle()); holder.te1.setText(bean.getNewslist().get(position).getCtime()); } @Override public int getItemCount() { return bean.getNewslist() == null ? 0 : bean.getNewslist().size(); } class myholder extends RecyclerView.ViewHolder { SimpleDraweeView img; TextView te; TextView te1; public myholder(View itemView) { super(itemView); img = itemView.findViewById(R.id.sdv); te = itemView.findViewById(R.id.te); te1 = itemView.findViewById(R.id.te1); } } }---------------------------------------------------------------------------------------------------------------------------
MainActivity.java
import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.widget.Toast; import com.jcodecraeer.xrecyclerview.XRecyclerView; import butterknife.ButterKnife; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; import *********.********.com.day7.bean.Bean; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class MainActivity extends AppCompatActivity { private XRecyclerView mXrv; private int num = 10; Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); mXrv = (XRecyclerView) findViewById(R.id.xrv); LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this); mXrv.setLayoutManager(manager); zip1();//rxjava 与 retrofit网络请求结合 } private void zip1() { //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.tianapi.com") .addConverterFactory(GsonConverterFactory.create()) // call 转化成 Observerable .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); IInterface iInterface = retrofit.create(IInterface.class); iInterface.get2("71e58b5b2f930eaf1f937407acde08fe", num) // 指定 被观察者 所在一个IO线程 .subscribeOn(Schedulers.io()) //指定观察者所在 主线程 .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Bean>() { @Override public void accept(Bean bean) throws Exception { //Toast.makeText(MainActivity.this, "111" + bean.getNewslist().get(0).getTitle(), Toast.LENGTH_SHORT).show(); System.out.println("bean = " + bean.toString()); final MyAdapter adapter = new MyAdapter(MainActivity.this, bean); mXrv.setAdapter(adapter); mXrv.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { // handler.postDelayed(new Runnable() { // @Override // public void run() { //刷新 num--; zip1(); Toast.makeText(MainActivity.this, "num = " + num, Toast.LENGTH_SHORT).show(); adapter.notifyDataSetChanged(); mXrv.refreshComplete(); // } // }, 900); } @Override public void onLoadMore() { // handler.postDelayed(new Runnable() { // @Override // public void run() { //加载 num++; zip1(); Toast.makeText(MainActivity.this, "num = " + num, Toast.LENGTH_SHORT).show(); adapter.notifyDataSetChanged(); mXrv.loadMoreComplete(); // } // }, 900); } }); } }); } }
------------------------------------------------------------------------------------------
MyApplication
import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; /** * Created by lenovo on 2017/12/06. */ public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
----------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="****************"> <uses-permission android:name="android.permission.INTERNET" /> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>