//倒入依赖
implementation'com.android.support:recyclerview-v7:27.1.1'
//写布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwei.www.sudoku.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
//要加载出来适配器的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img_logo"
android:layout_width="50dp"
android:layout_height="50dp" />
</LinearLayout>
1,//Inter成功失败供OKHttp使用的
package com.bwei.www.sudoku.ICallback;
/**
* Created by asus on 2018/10/21.
*/
public interface ICallback {
void onsuccess(Object obj);
void onfailed(Exception e);
}
//util工具类Okttp
package com.bwei.www.sudoku.utils;
import android.os.Handler;
import com.bwei.www.sudoku.ICallback.ICallback;
import com.google.gson.Gson;
import java.io.IOException;
import java.lang.reflect.Type;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* Created by asus on 2018/10/21.
*/
public class HttpUtils {
private static volatile HttpUtils instance;
private OkHttpClient client;
private Handler handler = new Handler();
private HttpUtils(){
client = new OkHttpClient();
}
public static HttpUtils getInstance(){
if (instance == null){
synchronized (HttpUtils.class){
if (null == instance){
instance = new HttpUtils();
}
}
}
return instance;
}
public void get(String url, final ICallback callback, final Type type){
Request request = new Request.Builder()
.get()
.url(url)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onfailed(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Gson gson = new Gson();
final Object o = gson.fromJson(result,type);
handler.post(new Runnable() {
@Override
public void run() {
callback.onsuccess(o);
}
});
}
});
}
}
3,//bean封装请求到的接口
内容省略
4,//MVP
M层获取Http数据
package com.bwei.www.sudoku.MVP;
import com.bwei.www.sudoku.ICallback.ICallback;
import com.bwei.www.sudoku.utils.HttpUtils;
import java.lang.reflect.Type;
/**
* Created by asus on 2018/10/21.
*/
public class liaoModel {
public void getData(String url, ICallback callback, Type type){
HttpUtils.getInstance().get(url,callback,type);
}
}
//V层
IView接口
package com.bwei.www.sudoku.MVP;
import com.bwei.www.sudoku.bean.Sudoku;
import java.util.List;
/**
* Created by asus on 2018/10/21.
*/
public interface IView {
void success(List<Sudoku.DataBean> data);
void faiedl(Exception e);
}
//p层
逻辑处理
package com.bwei.www.sudoku.MVP;
import com.bwei.www.sudoku.ICallback.ICallback;
import com.bwei.www.sudoku.bean.Sudoku;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
/**
* Created by asus on 2018/10/21.
*/
public class lianPersenter {
private IView iv;
private liaoModel model;
public void attach(IView iv){
this.iv = iv;
model = new liaoModel();
}
public void getSudoku(){
Type type = new TypeToken<Sudoku>(){}.getType();
model.getData("http://www.xieast.com/api/news/news.php?type=top&page=1", new ICallback() {
@Override
public void onsuccess(Object obj) {
Sudoku sudoku = (Sudoku) obj;
if (sudoku != null){
List<Sudoku.DataBean> data = sudoku.getData();
iv.success(data);
}
}
@Override
public void onfailed(Exception e) {
iv.faiedl(e);
}
},type);
}
public void detach(){
if (iv != null){
iv= null;
}
}
}
//Activity可以放在视图层
//找控件 继承IView
package com.bwei.www.sudoku;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.bwei.www.sudoku.MVP.IView;
import com.bwei.www.sudoku.MVP.lianPersenter;
import com.bwei.www.sudoku.adapter.SudoKuAdapter;
import com.bwei.www.sudoku.bean.Sudoku;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements IView {
private lianPersenter presenter;
private RecyclerView rvList;
private List<Sudoku.DataBean> list;
private SudoKuAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rvList = findViewById(R.id.rv_list);
list = new ArrayList<>();
GridLayoutManager gridLayoutManager = new GridLayoutManager(this,5);
rvList.setLayoutManager(gridLayoutManager);
adapter = new SudoKuAdapter(this,list);
rvList.setAdapter(adapter);
presenter = new lianPersenter();
presenter.attach(this);
presenter.getSudoku();
}
@Override
public void success(List<Sudoku.DataBean> data) {
list.clear();
list.addAll(data);
adapter.notifyDataSetChanged();
}
@Override
public void faiedl(Exception e) {
}
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter != null){
presenter.detach();
}
}
}
//Adapter
package com.bwei.www.sudoku.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bwei.www.sudoku.R; import com.bwei.www.sudoku.bean.Sudoku; import java.util.List; /** * Created by asus on 2018/10/21. */ public class SudoKuAdapter extends RecyclerView.Adapter<SudoKuAdapter.Holder>{ private Context context; private List<Sudoku.DataBean> list; public SudoKuAdapter(Context context, List<Sudoku.DataBean> list) { this.context = context; this.list = list; } @NonNull @Override public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View v = View.inflate(context, R.layout.item_sudoku,null); return new Holder(v); } @Override public void onBindViewHolder(@NonNull Holder holder, int position) { Glide.with(context).load(list.get(position).getThumbnail_pic_s()).into(holder.imgLogo); } @Override public int getItemCount() { return list.size(); } public class Holder extends RecyclerView.ViewHolder{ private ImageView imgLogo; public Holder(View itemView){ super(itemView); imgLogo = itemView.findViewById(R.id.img_logo); } } }