依赖
implementation 'com.squareup.okhttp3:okhttp:3.7.0'
implementation 'com.squareup.okio:okio:1.12.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'jp.wasabeef:glide-transformations:3.0.1'
implementation 'com.github.bumptech.glide:glide:4.8.0'
主页面
package com.example.week2.view.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.example.week2.R;
import com.example.week2.model.Bean.News;
import com.example.week2.presenter.MainPresenter;
import com.example.week2.view.adapter.NewsAdapter;
import com.example.week2.view.interfaces.IMainView;
public class MainActivity extends AppCompatActivity implements IMainView {
private String path="http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one";
private MainPresenter mainPresenter;
private RecyclerView recyclerView;
private NewsAdapter newsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
loadDataFromNet();
}
private void loadDataFromNet() {
mainPresenter.getHomeData(path);
}
private void initData() {
mainPresenter = new MainPresenter();
mainPresenter.setView(this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//网格
//GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(linearLayoutManager);
newsAdapter=new NewsAdapter(this);
recyclerView.setAdapter(newsAdapter);
}
private void initView() {
recyclerView = findViewById(R.id.view);
}
@Override
public void onSuccess(News news) {
newsAdapter.setData(news.getData());
}
@Override
protected void onDestroy() {
super.onDestroy();
mainPresenter.dettachView();
}
}
接口
package com.example.week2.view.interfaces;
import com.example.week2.model.Bean.News;
public interface IMainView extends IBseView{
void onSuccess(News news);
}
basepresenter
package com.example.week2.presenter;
import android.widget.ImageView;
import com.example.week2.view.activity.MainActivity;
import com.example.week2.view.interfaces.IBseView;
public class BasePresenter<V extends IBseView> {
private V mthis;
public void setView(V mainActivity) {
this.mthis=mainActivity;
}
public void dettachView(){
this.mthis=null;
}
public V getView(){
return mthis;
}
}
mainpresenter继承basepresenter
package com.example.week2.presenter;
import com.example.week2.model.Bean.HttpUtile;
import com.example.week2.model.Bean.News;
import com.example.week2.view.activity.MainActivity;
import com.example.week2.view.interfaces.IMainView;
public class MainPresenter extends BasePresenter<IMainView> implements HttpUtile.CallbackData<News>{
private final HttpUtile httpUtile;
public MainPresenter(){
httpUtile = HttpUtile.getInstance();
httpUtile.setCallback(this);
}
public void getHomeData(String path) {
httpUtile.getData(path,News.class);
}
@Override
public void onSuccess(News news) {
getView().onSuccess(news);
}
@Override
public void onErr(Exception e) {
}
}
okhttp
package com.example.week2.model.Bean;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.example.week2.presenter.MainPresenter;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class HttpUtile<T> {
private static HttpUtile httpUtile;
private CallbackData callbackData;
public HttpUtile (){}
public static HttpUtile getInstance(){
if(httpUtile==null){
httpUtile = new HttpUtile();
return httpUtile;
}else{
return httpUtile;
}
}
public void getData(String path, final Class<T> tClass){
OkHttpClient okHttpClient=new OkHttpClient();
Request.Builder builder = new Request.Builder();
final Request request = builder.url(path).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callbackData.onErr(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
Gson gson=new Gson();
T t = gson.fromJson(string, tClass);
Message message = handler.obtainMessage();
message.obj=t;
handler.sendMessage(message);
}
});
}
public void setCallback(CallbackData callbackData) {
this.callbackData=callbackData;
}
public interface CallbackData<D>{
void onSuccess(D d);
void onErr(Exception e);
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
T obj=(T) msg.obj;
callbackData.onSuccess(obj);
}
};
}
adapter适配器
package com.example.week2.view.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.week2.R;
import com.example.week2.model.Bean.News;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.MyViewHolder> {
private Context context;
private ArrayList<News.DataBean> list=new ArrayList<>();
public NewsAdapter(Context context) {
this.context = context;
}
public void setData(List<News.DataBean> data) {
if(data!=null){
list.addAll(data);
notifyDataSetChanged();
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.itme, null);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
myViewHolder.name.setText(list.get(i).getTitle());
Glide.with(context).load(list.get(i).getImage_url()).into(myViewHolder.img);
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView name;
ImageView img;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
name=itemView.findViewById(R.id.name);
img=itemView.findViewById(R.id.image);
}
}
}