//okhttp的依赖 compile 'com.squareup.okhttp3:okhttp:3.4.2' //图片加载框架glide compile 'com.github.bumptech.glide:glide:3.7.0' //recyclerview的依赖 implementation 'com.android.support:recyclerview-v7:26.+' //okhttp日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' //xrecyclerview的依赖上下拉刷新 implementation 'com.jcodecraeer:xrecyclerview:1.5.9' configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '27.1.1' } } } } okHttp的工具类
public class OkHttpMessager { private static Handler mhandler; private final OkHttpClient ok; private static OkHttpMessager okHttpMessager; public OkHttpMessager() { okhttp日志拦截器 HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); ok = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build(); mhandler = new Handler(); } 回调的方法 public static OkHttpMessager getshu(){ if (okHttpMessager==null){ okHttpMessager = new OkHttpMessager(); } return okHttpMessager; } 接口的固定模式 interface fun1 { void onres(String string); } private static void onsuccess(final String string,final fun1 callback) { mhandler.post(new Runnable() { @Override public void run() { if (callback!=null) { callback.onres(string); } } }); } public void say(String url, final fun1 callback) { Request build = new Request.Builder().url(url).build(); ok.newCall(build).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { onsuccess(response.body().string(),callback); } }); } }
public class MainActivity extends AppCompatActivity { private XRecyclerView recyclerView; private int page = 1; private int pagetype = 1; private MyAdapter myAdapter; private List<ReaBean.NewslistBean> datas; private String path = "http://api.tianapi.com/social/?key=b6605dd3366f74ff0b56c518bcf9791e&num=10&page=" + page; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage( msg ); datas = (List<ReaBean.NewslistBean>) msg.obj; setAdapter(); } }; private void setAdapter() { if (myAdapter == null) { myAdapter = new MyAdapter( datas, MainActivity.this ); recyclerView.setAdapter( myAdapter ); recyclerView.setLayoutManager( new LinearLayoutManager( MainActivity.this, LinearLayoutManager.VERTICAL, false ) ); } myAdapter.notifyDataSetChanged(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); datas = new ArrayList<>(); recyclerView = findViewById( R.id.lv ); initPlv(); initData(path); } private void initPlv() { 可以有可以没有,
XRecyclerView自带上下啦刷新功能
//recyclerView.setPullRefreshEnabled( true );
// recyclerView.setLoadingMoreEnabled( true );
recyclerView.setLoadingListener( new XRecyclerView.LoadingListener() {
@Override public void onRefresh() {
pagetype = 1;
page = 1;
path = "http://api.tianapi.com/social/?key=b6605dd3366f74ff0b56c518bcf9791e&num=10&page=" + page; initData(path);
recyclerView.refreshComplete();
} @Override
public void onLoadMore() {
pagetype = 2;
page++;
path = "http://api.tianapi.com/social/?key=b6605dd3366f74ff0b56c518bcf9791e&num=10&page=" + page; initData(path);
recyclerView.loadMoreComplete(); } }
); }
private void initData(String path) {
OkHttpMessager getshu = OkHttpMessager.getshu();
getshu.say( path, new OkHttpMessager.fun1() {
@Override public void onres(String string) {
Gson gson = new Gson();
ReaBean reaBean = gson.fromJson( string, ReaBean.class );
List<ReaBean.NewslistBean> data = reaBean.getNewslist();
if (pagetype == 1) {
datas.clear();
} datas.addAll( data );
Message obtain = Message.obtain();
obtain.obj = datas;
handler.sendMessage( obtain ); } } );
}}适配器没有写
布局没有写