fresco加载图片+retrofit网络请求+rxjava2+xrecyclerview下拉刷新上拉加载

来源:互联网 发布:彩蝶排课软件 编辑:程序博客网 时间:2024/05/20 07:16
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>

阅读全文
0 0