API @GET("home/getHome") Call<NewsBean> news();
adapter
package com.bwie.week01.adapter; import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bwie.week01.R; import com.bwie.week01.bean.NewsBean; import com.bwie.week01.product.view.ProductActivity; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; /** * Created by dell on 2018/11/3. */ public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> { private Context context; private List<NewsBean.DataBean.TuijianBean.ListBeanX> list; public NewsAdapter(Context context, List<NewsBean.DataBean.TuijianBean.ListBeanX> list) { this.context = context; this.list = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = View.inflate(context,R.layout.news_item,null); ViewHolder holder = new ViewHolder(v); return holder; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { String images = list.get(position).getImages(); String[] strings = images.split("\\|"); holder.sdvNews.setImageURI(strings[0]); holder.txtNews.setText(list.get(position).getTitle()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, ProductActivity.class); intent.putExtra("pid",list.get(position).getPid()); context.startActivity(intent); } }); } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder { private SimpleDraweeView sdvNews; private TextView txtNews; public ViewHolder(View itemView) { super(itemView); sdvNews = itemView.findViewById(R.id.sdv_news); txtNews = itemView.findViewById(R.id.txt_news); } } }
callback package com.bwie.week01.callback; /** * Created by dell on 2018/11/3. */ public interface ICallBack { void onSuccess(Object o); void onFiled(Exception e); }
model
package com.bwie.week01.News.model; import com.bwie.week01.api.NewsApi; import com.bwie.week01.bean.NewsBean; import com.bwie.week01.callback.ICallBack; import com.bwie.week01.utils.HttpUtils; import java.lang.reflect.Type; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * Created by dell on 2018/11/3. */ public class NewsModel { public void news(final ICallBack callBack){ NewsApi newsApi = HttpUtils.getInstance().create(NewsApi.class); Call<NewsBean> call = newsApi.news(); call.enqueue(new Callback<NewsBean>() { @Override public void onResponse(Call<NewsBean> call, Response<NewsBean> response) { if (response.isSuccessful()) { NewsBean body = response.body(); if (body != null & "0".equals(body.getCode())) { callBack.onSuccess(body); } } } @Override public void onFailure(Call<NewsBean> call, Throwable t) { callBack.onFiled(null); } }); } }
presenter
package com.bwie.week01.News.presenter; import com.bwie.week01.News.model.NewsModel; import com.bwie.week01.News.view.NewsView; import com.bwie.week01.bean.NewsBean; import com.bwie.week01.callback.ICallBack; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; /** * Created by dell on 2018/11/3. */ public class NewsPresenter { private NewsView nv; private NewsModel newsModel; public void attach(NewsView nv) { this.nv = nv; newsModel = new NewsModel(); } public void getNews(){ // Type type = new TypeToken<NewsBean>(){}.getType(); newsModel.news(new ICallBack() { @Override public void onSuccess(Object o) { NewsBean newsBean = (NewsBean) o; if (newsBean != null){ nv.onSuccess(newsBean.getData().getTuijian().getList()); } } @Override public void onFiled(Exception e) { nv.onFailed(e); } }); } } activity
package com.bwie.week01.News.view; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.widget.Toast; import com.bwie.week01.News.presenter.NewsPresenter; import com.bwie.week01.R; import com.bwie.week01.adapter.NewsAdapter; import com.bwie.week01.bean.NewsBean; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class MainActivity extends AppCompatActivity implements NewsView{ @BindView(R.id.rv_news) RecyclerView rvNews; private List<NewsBean.DataBean.TuijianBean.ListBeanX> listBeanXES; private NewsAdapter adapter; private NewsPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initView(); } private void initView() { listBeanXES = new ArrayList<>(); adapter = new NewsAdapter(this,listBeanXES); RecyclerView.LayoutManager manager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); rvNews.setLayoutManager(manager); rvNews.setAdapter(adapter); presenter = new NewsPresenter(); presenter.attach(this); presenter.getNews(); } @Override public void onSuccess(List<NewsBean.DataBean.TuijianBean.ListBeanX> list) { if (list != null){ listBeanXES.clear(); listBeanXES.addAll(list); adapter.notifyDataSetChanged(); } } @Override public void onFailed(Exception e) { Toast.makeText(this,"网络请求错误",Toast.LENGTH_LONG).show(); } }
utils
package com.bwie.week01.utils; import com.bwie.week01.callback.ICallBack; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by dell on 2018/11/3. */ public class HttpUtils { public static final String url = "http://www.zhaoapi.cn/"; private Retrofit retrofit; private static final class SINGLE_INSTANCE { private static final HttpUtils _INSTANCE = new HttpUtils(); } public static HttpUtils getInstance() { return SINGLE_INSTANCE._INSTANCE; } private HttpUtils() { retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .build(); } public Retrofit getRetrofit(){ return retrofit; } public <T> T create(Class<T> clazz){ return retrofit.create(clazz); } }