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

本文介绍了一个基于Retrofit和RxJava实现的新闻列表应用案例,该应用通过Retrofit发起网络请求获取新闻数据,并利用RxJava进行异步处理。文章详细展示了项目的依赖配置、UI布局文件、数据模型、接口定义、适配器及主活动等关键部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值