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'