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>