compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.2' compile 'com.android.support:recyclerview-v7:24.2.1' compile 'com.github.bumptech.glide:glide:4.0.0'
package com.exbawei.liteli.myfulian;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.exbawei.liteli.myfulian.presenter.MusicPresenter;import java.util.List;public class MainActivity extends AppCompatActivity implements MusicConstract.IMusicView { private RecyclerView rv; private Myadapter adapter; private MusicPresenter presenter; private int begin = 0, size = 10; boolean tag = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rv = (RecyclerView) findViewById(R.id.rv); adapter = new Myadapter(MainActivity.this); rv.setLayoutManager(new LinearLayoutManager(MainActivity.this)); rv.setAdapter(adapter); presenter = new MusicPresenter(MainActivity.this); presenter.getData(begin); Mone(); } private void Mone() { rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); LinearLayoutManager layoutManager = (LinearLayoutManager) rv.getLayoutManager(); int itemPosition = layoutManager.findLastCompletelyVisibleItemPosition(); int count = layoutManager.getItemCount(); if (tag && itemPosition==count-1) { presenter.getData(begin+=size); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy > 0) { tag = true; } else { tag=false; } } }); } @Override public void setData(List<MusicBean.SongListBean> list) { adapter.add(list); }}----------------------------model------------------------------------package com.exbawei.liteli.myfulian.model; import com.exbawei.liteli.myfulian.MusicBean; import com.exbawei.liteli.myfulian.MusicConstract; import com.exbawei.liteli.myfulian.utils.GsonObjectCallback; import com.exbawei.liteli.myfulian.utils.OkHttp3Utils; import java.io.IOException; import okhttp3.Call; public class MusicModel implements MusicConstract.IMusicModel { @Override public void getMusicList(int offset, final MusicConstract.IMusicView view) { OkHttp3Utils.doGet("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=" + offset, new GsonObjectCallback<MusicBean>() { @Override public void onUi(MusicBean musicBean) { view.setData(musicBean.getSong_list()); } @Override public void onFailed(Call call, IOException e) { } }); } }
-----------------------------------presenter---------------------------package com.exbawei.liteli.myfulian.presenter; import com.exbawei.liteli.myfulian.MusicConstract; import com.exbawei.liteli.myfulian.model.MusicModel; public class MusicPresenter extends MusicConstract.IMusicPresenter { private MusicModel model; private MusicConstract.IMusicView view; public MusicPresenter(MusicConstract.IMusicView view){ model=new MusicModel(); this.view=view; } @Override public void getData(int offset) { model.getMusicList(offset,view); } }
-----------------------------------utils------------package com.exbawei.liteli.myfulian.utils; import android.os.Environment; import android.os.Handler; import java.io.File; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; /** * 1. 类的用途 封装OkHttp3的工具类 用单例设计模式 * 2. @author forever * 3. @date 2017/9/6 09:19 */ public class OkHttp3Utils { /** * 懒汉 安全 加同步 * 私有的静态成员变量 只声明不创建 * 私有的构造方法 * 提供返回实例的静态方法 */ private static OkHttp3Utils okHttp3Utils = null; private OkHttp3Utils() { } public static OkHttp3Utils getInstance() { if (okHttp3Utils == null) { //加同步安全 synchronized (OkHttp3Utils.class) { if (okHttp3Utils == null) { okHttp3Utils = new OkHttp3Utils(); } } } return okHttp3Utils; } private static OkHttpClient okHttpClient = null; public synchronized static OkHttpClient getOkHttpClient() { if (okHttpClient == null) { File sdcache = new File(Environment.getExternalStorageDirectory(), "cache"); int cacheSize = 10 * 1024 * 1024; //拦截器 LoggingInterceptor interceptor=new LoggingInterceptor(); okHttpClient = new OkHttpClient.Builder().connectTimeout(15, TimeUnit.SECONDS) //添加OkHttp3的拦截器 .addInterceptor(interceptor) .writeTimeout(20, TimeUnit.SECONDS).readTimeout(20, TimeUnit.SECONDS) .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize)) .build(); } return okHttpClient; } private static Handler mHandler = null; public synchronized static Handler getHandler() { if (mHandler == null) { mHandler = new Handler(); } return mHandler; } /** * get请求 * 参数1 url * 参数2 回调Callback */ public static void doGet(String url, Callback callback) { //创建OkHttpClient请求对象 OkHttpClient okHttpClient = getOkHttpClient(); //创建Request Request request = new Request.Builder().url(url).build(); //得到Call对象 Call call = okHttpClient.newCall(request); //执行异步请求 call.enqueue(callback); } }---------------------------------------------------package com.exbawei.liteli.myfulian; import java.util.List; /** * Created by mamiaomiao on 2017/10/16. */ public interface MusicConstract { interface IMusicView { void setData(List<MusicBean.SongListBean> list); } interface IMusicModel { void getMusicList(int offset, IMusicView view); } abstract class IMusicPresenter { public abstract void getData(int offset); } }-----------------------------------------------------------package com.exbawei.liteli.myfulian; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import java.util.ArrayList; import java.util.List; /** * Created by li te li on 2017/10/16. */ public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder> { List<MusicBean.SongListBean> list = new ArrayList<>(); Context context; public Myadapter(Context context) { this.context = context; } public void add(List<MusicBean.SongListBean> list){ this.list.addAll(list); notifyDataSetChanged(); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view =View.inflate(context,R.layout.item,null); ViewHolder vh=new ViewHolder(view); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Glide.with(context).load(list.get(position).getPic_small()).into(holder.iv); holder.tv1.setText(list.get(position).getTitle()); holder.tv2.setText(list.get(position).getAlbum_title()); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { ImageView iv; TextView tv1; TextView tv2; public ViewHolder(View itemView) { super(itemView); iv= (ImageView) itemView.findViewById(R.id.iv); tv1= (TextView) itemView.findViewById(R.id.tv1); tv2= (TextView) itemView.findViewById(R.id.tv2); } } }
mvp,okhttp,recyclerview
最新推荐文章于 2019-04-02 17:33:39 发布