使用MVP框架,retrofit结合Rxjava以及fresco加载图片,用recycleview实现

package com.example.retrofit.conttect;

public class contet {
    public static final String BASE_URL = "http://tingapi.ting.baidu.com/v1/restserver/";

}
model
package com.example.retrofit.model;

import com.example.retrofit.Bean.MusicData;
import retrofit2.http.GET;
import rx.Observable;


public interface Ifrit {
  @GET("ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0")
    Observable<MusicData> getTopMovie();
}
model
package com.example.retrofit.model;

import rx.Observer;

public interface Imousicmodel {
    public  void showrecy(Observer observer);
    public  void de();

}
model
package com.example.retrofit.model;


import com.example.retrofit.LoggingInterceptor;
import com.example.retrofit.conttect.contet;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observer;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * Rxjava 拦截器
 */

public class Mousicmodel implements Imousicmodel{
    Subscription s;
    @Override
    public void showrecy(Observer observer) {
        //添加拦截器
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new LoggingInterceptor()).build();
        //Retrofit的构造者
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(contet.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .client(client)
                .build();
         Ifrit resquest=retrofit.create(Ifrit.class);
         s=resquest.getTopMovie()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }
    @Override
    public void de() {
        s.unsubscribe();
    }

}
view层
package com.example.retrofit.view;

import com.example.retrofit.Bean.MusicData;

/**
 *view层
 */

public interface MousicView {
    public  void initdata(MusicData md);
}
P层
package com.example.retrofit.presenter;


public interface IPresenter<T> {
    public  void attch(T view);
    public void detch();
}
P层
package com.example.retrofit.presenter;

import android.content.Context;
import android.util.Log;

import com.example.retrofit.Bean.MusicData;
import com.example.retrofit.model.Imousicmodel;
import com.example.retrofit.model.Mousicmodel;
import com.example.retrofit.view.MousicView;

import java.lang.ref.SoftReference;

import rx.Observer;

/**
 * presenter
 */

public class Mousicpresenter implements IPresenter<MousicView>{
    Context context;
    SoftReference<MousicView>softReference;
    Imousicmodel model;

    public Mousicpresenter(Context context, MousicView view) {
        this.context = context;
        model=new Mousicmodel();
        attch(view);
    }

    public  void showmusic(){
        model.showrecy(new Observer() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {
              
            }

            @Override
            public void onNext(Object o) {
                
                softReference.get().initdata((MusicData) o);

            }
        });


    }
    //绑定
    @Override
    public void attch(MousicView view) {
        softReference=new SoftReference<MousicView>(view);
    }
    //解绑
    @Override
    public void detch() {

      softReference.clear();
    }

    public  void  se(){
        model.de();
    }
}
baseactivity
package com.example.retrofit.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.example.retrofit.presenter.IPresenter;
import com.example.retrofit.view.MousicView;

/**
 * 基类
 */

public abstract class Basetivity<T extends IPresenter<MousicView>> extends AppCompatActivity{
  public   T presenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        createpresenter();
    }
  public  abstract  void createpresenter();
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (presenter!=null){
            presenter.detch();
        }
    }
}
activity
package com.example.retrofit;

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

import com.example.retrofit.Bean.MusicData;
import com.example.retrofit.activity.Basetivity;
import com.example.retrofit.adapter.Myadapter;
import com.example.retrofit.presenter.Mousicpresenter;
import com.example.retrofit.view.MousicView;

public class MainActivity extends Basetivity<Mousicpresenter>implements MousicView {
    RecyclerView mRv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        presenter.showmusic();

    }

    /**
     * 实现presstenr对象
     */
    @Override
    public void createpresenter() {
        presenter=new Mousicpresenter(this,this);
    }

    /**
     * 加载视图、分割线
     */
    private void initView() {
        mRv = (RecyclerView) findViewById(R.id.rv);
        LinearLayoutManager mar=new LinearLayoutManager(this);
        mRv.setLayoutManager(mar);
        mRv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
    }

    /**
     * 数据源,设置适配器
     * @param md
     */
    @Override
    public void initdata(MusicData md) {
        Myadapter myadapter=new Myadapter(this,md);
        mRv.setAdapter(myadapter);

    }

    /**
     * Rxjava销毁
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.se();
        Log.i("cccc", "onDestroy: "+"xiaohuiill");

    }
} 
package com.example.retrofit;

import android.os.Build;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 网络拦截器
 */

public class LoggingInterceptor implements Interceptor {
    private static final String UA = "User-Agent";

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request()
                .newBuilder()
                .addHeader(UA, makeUA())
                .build();
        return chain.proceed(request);
    }

    private String makeUA() {
        String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
        return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
    }

}
Adapter
package com.example.retrofit.adapter;

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.TextView;

import com.example.retrofit.Bean.MusicData;
import com.example.retrofit.R;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;

/**
 * adapter
 */

public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder>{
    Context context;
    MusicData md;

    public Myadapter(Context context, MusicData md) {
        this.context = context;
        this.md = md;
    }

    @Override
    public Myadapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context, R.layout.items_list,null);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }
   /**
   *Fresco 加载图片要记得写Mapp
   */
    @Override
    public void onBindViewHolder(Myadapter.ViewHolder holder, int position) {
        holder.ttv.setText(md.getSong_list().get(position).getTitle());
        Uri uri=Uri.parse(md.getSong_list().get(position).getPic_big());
        //图片构造者
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setUri(uri)
                .setAutoPlayAnimations(true)
                .build();
        holder.simpleDraweeView.setController(controller);
    }

    @Override
    public int getItemCount() {
        return md==null?0:md.getSong_list().size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        SimpleDraweeView simpleDraweeView;
        TextView ttv;
        public ViewHolder(View itemView) {

            super(itemView);
            simpleDraweeView=itemView.findViewById(R.id.re_iv);
            ttv=itemView.findViewById(R.id.tv_name);
        }
    }
}
Myapp
package com.example.retrofit.app;

import android.app.Application;

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

/**
 * fresco
 */

public class Myapp extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}
记得添加权限
/**
		*添加权限
		*/
		 android:name=".app.Myapp" 
		 <uses-permission android:name="android.permission.INTERNET"/>

依赖

compile 'com.facebook.fresco:fresco:0.11.0'
    compile'com.squareup.retrofit2:retrofit:2.0.0-beta4'
    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
    compile'com.squareup.retrofit2:converter-gson:2.0.0-beta4'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值