需要的依赖
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
创建接口
public interface DataCallBack {
public void secc(String str);
}
Model层
model接口
import kk.com.dome2.model.intfacees.DataCallBack;
public interface ModelImpe {
public void requstData(DataCallBack dataCallBack);
}
public class IModel implements ModelImpe {
DataCallBack dataCallBack;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String json = (String) msg.obj;
//把数据返回到p层
dataCallBack.secc(json);
}
};
@Override
public void requstData(DataCallBack dataCallBack) {
this.dataCallBack = dataCallBack;
OKHttp.getInstance().doget(handler);
}
}
Presenter层
接口
public interface PresenterImpe {
public void toModel();
}
public class Presenter implements PresenterImpe{
//model 接口对象
ModelImpe modelImpe;
//view的接口对象
IView iView;
public Presenter(IView iView) {
this.iView = iView;
modelImpe=new IModel();
}
@Override
public void toModel() {
modelImpe.requstData(new DataCallBack() {
@Override
public void secc(String str) {
//得到执行
iView.showData(str);
}
});
}
}
OKHttp3
public class OKHttp {
static OKHttp okHttp=null;
private final OkHttpClient okHttpClient;
public OKHttp() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.writeTimeout(5,TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.build();
}
public static OKHttp getInstance(){
if (okHttp == null){
synchronized (OKHttp.class){
if (okHttp == null){
okHttp = new OKHttp();
}
}
}
return okHttp;
}
public void doget(final Handler mHandler) {
Request request = new Request.Builder()
.url(Url.url)
.build();
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 {
//成功
Message message = new Message();
message.obj = response.body().string();
mHandler.sendMessage(message);
}
});
}
public void doPost() {
String url = "";
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("phone", "122222222")
.add("pwd", "12345")
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
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 {
}
});
}
}
Bean类
package kk.com.dome2.utills;
import java.util.List;
public class Bean {
/**
* code : 200
* data : [{"content":"习近平举行仪式欢迎加蓬总统访华","id":10000,"image_url":"http://pic32.nipic.com/20130817/9745430_101836881000_2.jpg","title":"今日头条","type":1},{"content":"习近平举行仪式欢迎加蓬总统访华","id":10001,"image_url":"http://pic15.nipic.com/20110630/6322714_105943746342_2.jpg","title":"往期故事","type":2},{"content":"这个市的书记市长双双被约谈 引发震动","id":10002,"image_url":"http://pic48.nipic.com/file/20140916/2531170_195153248000_2.jpg","title":"讨论天下","type":3},{"content":"\u201c乔丹\u201d商标是否侵权 4年官司迎最高法判决 调查","id":10003,"image_url":"http://img.taopic.com/uploads/allimg/140626/240469-1406261S24553.jpg","title":"我的珍爱","type":4},{"content":"黑龙江稻农收入暴涨组团进城买房 有人买十多套","id":10004,"image_url":"http://pic77.nipic.com/file/20150911/21721561_155058651000_2.jpg","title":"我的未来","type":5},{"content":"印尼6.4级地震致97死 专家称当地防震意识差","id":10005,"image_url":"http://img4.duitang.com/uploads/item/201603/18/20160318103156_cziuY.jpeg","title":"东芝","type":6}]
* head_url : http://h.hiphotos.baidu.com/zhidao/pic/item/9d82d158ccbf6c81e718270eb93eb13533fa402c.jpg
* name : 思凡
*/
private int code;
private String head_url;
private String name;
private List<DataBean> data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getHead_url() {
return head_url;
}
public void setHead_url(String head_url) {
this.head_url = head_url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* content : 习近平举行仪式欢迎加蓬总统访华
* id : 10000
* image_url : http://pic32.nipic.com/20130817/9745430_101836881000_2.jpg
* title : 今日头条
* type : 1
*/
private String content;
private int id;
private String image_url;
private String title;
private int type;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImage_url() {
return image_url;
}
public void setImage_url(String image_url) {
this.image_url = image_url;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
}
VIew层
public interface IView {
public void showData(String str);
}
MainActivity类
public class MainActivity extends AppCompatActivity implements IView,MyAdapter.onclickItem{
RecyclerView recyclerView;
PresenterImpe presenterImpe;
private List<Bean.DataBean> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//接 口 new 类
presenterImpe=new Presenter(this);
presenterImpe.toModel();
initData();
}
private void initData() {
recyclerView=findViewById(R.id.recyclerView);
}
@Override
public void showData(String str) {
//在此方法中跟新显示
Log.e("接口",str);
Gson gson=new Gson();
Bean bean = gson.fromJson(str, Bean.class);
data = bean.getData();
MyAdapter myAdapter=new MyAdapter(data,MainActivity.this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(myAdapter);
}
适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.VH> {
List<Bean.DataBean> list;
Context context;
public MyAdapter(List<Bean.DataBean> data, Context context) {
this.list = data;
this.context = context;
}
@Override
public VH onCreateViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
return new VH(inflate);
}
@Override
public void onBindViewHolder(VH holder, final int position) {
holder.textView.setText(list.get(position).getTitle());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
oncickItem.onclick(v,list.get(position).getId());
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class VH extends RecyclerView.ViewHolder{
TextView textView;
public VH(View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.text1);
}
}
public interface onclickItem {
void onclick(View view,int id);
}
public onclickItem oncickItem;
public void setOncickItem(onclickItem oncickItem) {
this.oncickItem = oncickItem;
}
}