MVP+Fresco+Rxjava

ApiService:
//http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0
@GET("v1/restserver/ting")
Observable<Music> getParams(@Query("method") String method, @Query("type") int type, @Query("size") int size, @Query("offset") int offset);
 
 
MainActivity:
package ccc.ww.zhoukai2_lx;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import com.facebook.drawee.backends.pipeline.Fresco;

import java.util.List;

import MVP.ShowPresenterImpl;
import MVP.ShowView;

public class MainActivity extends AppCompatActivity implements ShowView {

    private RecyclerView recy;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);

        recy=(RecyclerView)findViewById(R.id.recy);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recy.setLayoutManager(linearLayoutManager);
        ShowPresenterImpl shoPerson = new ShowPresenterImpl(this);
        shoPerson.relevance();
    }



    @Override
    public void showData(Music music) {
        List<Music.SongListBean> song_list = music.getSong_list();
        for (int i = 0; i < song_list.size(); i++) {
            Music.SongListBean songListBean = song_list.get(i);
            Log.i("xxx", songListBean.getAlbum_title());
        }
        MyAdapter adapter = new MyAdapter(song_list,this);
        recy.setAdapter(adapter);
    }
}

MyAdapter:

package ccc.ww.zhoukai2_lx;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;


public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    List<Music.SongListBean> song_list;
    Context context;

    public MyAdapter(List<Music.SongListBean> song_list, Context context) {
        this.song_list = song_list;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item,parent, false);
        MyViewHolder vh = new MyViewHolder(view);
        return vh;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        MyViewHolder myViewHolder= (MyViewHolder) holder;
        Music.SongListBean songListBean = song_list.get(position);
        myViewHolder.simp.setImageURI(songListBean.getPic_small());
        myViewHolder.tv.setText(songListBean.getTitle());
        myViewHolder.title.setText(songListBean.getAll_rate());
    }

    @Override
    public int getItemCount() {
        return song_list.size();
    }
    class MyViewHolder extends RecyclerView.ViewHolder{

        private final SimpleDraweeView simp;
        private final TextView title,tv;

        public MyViewHolder(View itemView) {
            super(itemView);
            simp = itemView.findViewById(R.id.simp);
            title = itemView.findViewById(R.id.title);
            tv = itemView.findViewById(R.id.tv);

        }
    }
}
MVP:


OnFinishListener:
public interface OnFinishListener {
    void onSuccess(Music music);
}
ShowModel:
public interface ShowModel {
    void getData(OnFinishListener listener);
}

ShowModelImpl
package MVP;

import android.text.TextUtils;
import android.util.Log;

import com.google.gson.Gson;

import java.io.IOException;
import java.util.List;

import ccc.ww.zhoukai2_lx.Api;
import ccc.ww.zhoukai2_lx.ApiService;
import ccc.ww.zhoukai2_lx.BuildConfig;
import ccc.ww.zhoukai2_lx.LoggingInterceptor;
import ccc.ww.zhoukai2_lx.Music;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;



public class ShowModelImpl implements ShowModel {
   // String url="http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0";
    @Override
    public void getData( final OnFinishListener listener) {
        OkHttpClient.Builder client = new OkHttpClient.Builder()
                .addInterceptor(new LoggingInterceptor())//添加请求拦截
                .retryOnConnectionFailure(true);
        //如果不是在正式包,添加拦截 打印响应json
        if (BuildConfig.DEBUG) {
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor(
                    new HttpLoggingInterceptor.Logger() {
                        @Override
                        public void log(String message) {
                            if (TextUtils.isEmpty(message)) return;
                            String s = message.substring(0, 1);
                            //如果收到想响应是json才打印
                            if ("{".equals(s) || "[".equals(s)) {
                                //HttpLoggingInterceptor.Logger.i("收到响应: " + message);
                            }
                        }
                    });
            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            client.addInterceptor(logging);
        }
        Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.url).addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava
                .client(client.build())
                .build();
        ApiService apiService = retrofit.create(ApiService.class);
        //得到Observable
        Observable<Music> observable = apiService.getParams("baidu.ting.billboard.billList",1,10,0);//生产事件
        //被观察者订阅观察 默认在同一个线程
        observable.subscribeOn(Schedulers.io())//指定IO做耗时操作
                .observeOn(AndroidSchedulers.mainThread())//指定更新UI在主线程
                .subscribe(new Observer<Music>() {
                    @Override
                    public void onCompleted() {//完成

                    }

                    @Override
                    public void onError(Throwable e) {//失败
                        Log.i("xxx", e.getMessage());
                    }

                    @Override
                    public void onNext(Music music) {//消费事件
                        if (listener!=null){
                            listener.onSuccess(music);
                        }
                    }
                });
       /* OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
        //构建Request
        final Request request = new Request.Builder()
                .url(url)
                .build();
        //得到Call
        Call call = okHttpClient.newCall(request);
        //执行异步
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //直接回调到子线程
                String json = response.body().string();
                Gson gson = new Gson();
                Music music = gson.fromJson(json, Music.class);
                //接口回调

                if (listener!=null){
                    listener.onSuccess(music);
                }
            }
        });*/
    }
}
ShowPresenter

public interface ShowPresenter {
    void relevance();
}


ShowPresenterImpl

package MVP;


import ccc.ww.zhoukai2_lx.Music;

public class ShowPresenterImpl implements ShowPresenter,OnFinishListener {
    ShowView showView;
    private final ShowModel showModel;
    //初始化
    public ShowPresenterImpl(ShowView showView){
        this.showView  = showView;
        //多态
        showModel = new ShowModelImpl();
    }

    @Override
    public void relevance() {
        //p跟m关联
        showModel.getData(this);
    }

    @Override
    public void onSuccess(Music music) {
        //关联view
        showView.showData(music);
    }
}

ShowView
public interface ShowView {
    void showData(Music music);
}

main:
<android.support.v7.widget.RecyclerView
    android:id="@+id/recy"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>

item:
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simp"
    android:layout_width="90dp"
    android:layout_height="90dp" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="11"/>
        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="11"/>
</LinearLayout>

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:okhttp:3.1.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.facebook.fresco:fresco:0.12.0'


<uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值