MVP+okhttp请求网络接口
来源:互联网 发布:qt tcp 端口监听 编辑:程序博客网 时间:2024/05/29 15:48
MVP+okhttp请求网络接口
manifest加权限:
<uses-permission android:name="android.permission.INTERNET" />build.gradle添加依赖:recyclerview依赖:
compile 'com.android.support:recyclerview-v7:26.0.+'okhttp依赖:
compile 'com.squareup.okhttp3:okhttp:3.9.0'gson依赖:compile 'com.google.code.gson:gson:2.8.1'Modle层:glide依赖:
compile 'com.github.bumptech.glide:glide:3.7.0'
main——activity布局:<android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
item布局:<ImageView android:id="@+id/img" android:layout_margin="10dp" android:src="@mipmap/ic_launcher" android:layout_width="80dp" android:layout_height="80dp" /><TextView android:id="@+id/tv" android:text="您好!我是帅哥刘鑫" android:padding="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 工具类OkHttpUtils:public class OkHttpUtils {
private static OkHttpClient okHttpClient;private static Handler handler = new Handler();public static void doGet(String url, final SendData callBack){ okHttpClient = new OkHttpClient.Builder() //添加拦截器等等 .build(); //请求体 Request request = new Request.Builder().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 { final String string = response.body().string(); handler.post(new Runnable() { @Override public void run() { callBack.sendData(string); } }); } });}public interface SendData{ void sendData(String result);}}public class DataModel implements Contract.IDataModel{ private String url = "http://shouyoutoutiao.app.17wanba.com/toutiao/get_list"; @Override public void getData(final IGetDataFromNet iGetDataFromNet) { OkHttpUtils.doGet(url, new OkHttpUtils.SendData() { @Override public void sendData(String result) { Bean bean = Bean.objectFromData(result); List<Bean.DataBean> data = bean.data; iGetDataFromNet.getData(data); } }); } public interface IGetDataFromNet{ void getData(List<Bean.DataBean> list); }}Contract层:public class Contract { // 1、创建View get/set public interface IDataView { void setData(List<Bean.DataBean> list);// void setText(String str);// String getText(); } // 2、Model接口 public interface IDataModel { //获取数据 void getData(DataModel.IGetDataFromNet iGetDataFromNet);//此处需要回调接口 } // 3、Presenter接口 public interface IDataPresenter { void showData(); }}Presenter层:public class DataPresenter implements Contract.IDataPresenter{ //需要Model,view private DataModel model; private Contract.IDataView view; public DataPresenter(Contract.IDataView view) { this.view = view; model = new DataModel(); } @Override public void showData() { model.getData(new DataModel.IGetDataFromNet() { @Override public void getData(List<Bean.DataBean> list) { view.setData(list); } }); }}
Bean类:public class Bean { /** * ret : 0 * data : [{"id":"23427","type":"1","source_id":"15","template_id":"5","title":"烧菜制药成就《我叫MT3》财富之路","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/07/05/6bb734aa3f191fc34b3f62e17968f6e4.jpg"}],"url":"/toutiao/detail/23427?create_time=1510170601","status":"1","create_time":"11月08日 19:50","time_length":"0","source_name":"一起玩吧"},{"id":"20386","type":"1","source_id":"19","template_id":"5","title":"《枪战英雄》超燃首测 百万名枪礼品助你超神","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/06/17/26d484db27eaa4812d153662147f59f7.jpg"}],"url":"/toutiao/detail/20386?create_time=1508936894","status":"1","create_time":"10月25日 13:08","time_length":"0","source_name":"游戏多"},{"id":"736","type":"1","source_id":"15","template_id":"5","title":"《全民奇迹MU》好基友一辈子 坑坑更健康","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/03/23/e555b5fca3037f3be0dfaf61d19a3977.jpg"}],"url":"/toutiao/detail/736?create_time=1507698316","status":"1","create_time":"10月11日 05:05","time_length":"0","source_name":"一起玩吧"},{"id":"15263","type":"1","source_id":"15","template_id":"5","title":"《山口山战记》站撸小王子会长全面解析","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/05/26/2acd8269422f84ae2e7dbe79e5b24714.jpg"}],"url":"/toutiao/detail/15263?create_time=1505516991","status":"1","create_time":"09月15日 23:09","time_length":"0","source_name":"一起玩吧"},{"id":"14609","type":"1","source_id":"15","template_id":"5","title":"玩友时代:专注耕耘女性市场","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/05/25/3eadbc701ab2fb043249ccc81b2dc5d4.jpg"}],"url":"/toutiao/detail/14609?create_time=1503712094","status":"1","create_time":"08月26日 01:48","time_length":"0","source_name":"一起玩吧"},{"id":"9875","type":"1","source_id":"15","template_id":"5","title":"漫威的英雄主义,触手TV的游戏激情","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/05/11/b2150f6ef0fc1cfeb2df732d5a5ba659.jpg"}],"url":"/toutiao/detail/9875?create_time=1502334268","status":"1","create_time":"08月10日 03:04","time_length":"0","source_name":"一起玩吧"},{"id":"10751","type":"1","source_id":"17","template_id":"5","title":"中国Dota2职业联赛启动 电竞选手成为国家注册运动员","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/05/13/ac6f94266c1e425e8b545d9dffde8de9.jpg"}],"url":"/toutiao/detail/10751?create_time=1500270343","status":"1","create_time":"07月17日 05:45","time_length":"0","source_name":"触乐"},{"id":"15227","type":"1","source_id":"21","template_id":"5","title":"史上首位机器人律师即将上岗","img":[{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/05/26/bf23b72f63948cf9a2e3f831f86220dc.jpg"}],"url":"/toutiao/detail/15227?create_time=1499444287","status":"1","create_time":"07月07日 16:18","time_length":"0","source_name":"口袋巴士"}] * flag : 0 */ public int ret; public int flag; public List<DataBean> data; public static Bean objectFromData(String str) { return new Gson().fromJson(str, Bean.class); } public static class DataBean { /** * id : 23427 * type : 1 * source_id : 15 * template_id : 5 * title : 烧菜制药成就《我叫MT3》财富之路 * img : [{"url":"http://img.storage.17wanba.org.cn/shouyou/2016/07/05/6bb734aa3f191fc34b3f62e17968f6e4.jpg"}] * url : /toutiao/detail/23427?create_time=1510170601 * status : 1 * create_time : 11月08日 19:50 * time_length : 0 * source_name : 一起玩吧 */ public String id; public String type; public String source_id; public String template_id; public String title; public String url; public String status; public String create_time; public String time_length; public String source_name; public List<ImgBean> img; public static DataBean objectFromData(String str) { return new Gson().fromJson(str, DataBean.class); } public static class ImgBean { /** * url : http://img.storage.17wanba.org.cn/shouyou/2016/07/05/6bb734aa3f191fc34b3f62e17968f6e4.jpg */ public String url; public static ImgBean objectFromData(String str) { return new Gson().fromJson(str, ImgBean.class); } } }}
适配器:public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{ private List<Bean.DataBean> list = new ArrayList<>(); private Context context; private LayoutInflater inflater; public Adapter(List<Bean.DataBean> list, Context context) { this.list = list; this.context = context; inflater = LayoutInflater.from(context); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Bean.DataBean bean = list.get(position); holder.tv.setText(bean.title); Glide.with(context).load(bean.img.get(0).url).into(holder.iv); } @Override public int getItemCount() { return list==null?0:list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { public ImageView iv; public TextView tv; public ViewHolder(View itemView) { super(itemView); iv = itemView.findViewById(R.id.img); tv = itemView.findViewById(R.id.tv); } }}Main_Activity类:public class Main_Activity extends AppCompatActivity implements Contract.IDataView{ private RecyclerView my_recycler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); initView(); } private void initView() { my_recycler = (RecyclerView) findViewById(R.id.recyclerview); LinearLayoutManager manager = new LinearLayoutManager(this); my_recycler.setLayoutManager(manager); DataPresenter presenter = new DataPresenter(this); presenter.showData(); } @Override public void setData(List<Bean.DataBean> list) { Adapter adapter = new Adapter(list,this); my_recycler.setAdapter(adapter); }}
阅读全文
1 0
- MVP+okhttp请求网络接口
- 网络请求框架 Rxjava+ReTrofit+okHttp+MVP
- okHttp网络请求2——MVP
- MVP-简单的OkHttp网络请求数据
- OkHttp+MVP请求数据
- MVP注册登录+OkHttp网络请求+展示数据
- MVP操作RecyclerView多条目SpringView,OKHttp封装请求网络
- MVP架构分包+OkHttp网络请求+RecyclerView展示数据
- 网络请求Okhttp封装加单例加拦截器 结合MVP
- Mvp框架+okhttp请求+recyclerview
- MVP+OKHttp获取网络数据
- 请求网络接口_注册登录之MVP模式
- MVP其中有接口(x.http网络请求)
- java okhttp 网络请求
- OkHttp网络请求
- OKHttp请求网络数据
- okhttp网络请求框架
- 网络请求框架OKHttp
- iOS开发之滑块UISlider
- 今晚8点:基于强化学习的关系抽取和文本分类 | PhD Talk #18
- WebRTC-线程模型(1)
- 子系统组(Subsystem Group)子系统(Subsystem)子服务(Subserver)
- 教你如何使用CountDownTimer定时器(短信验证码倒计时)
- MVP+okhttp请求网络接口
- LCD参数解释及计算
- JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金)
- python解决SNIMissingWarning和InsecurePlatformWarning警告 在想要获取https站点的资源时,会报出SNIMissingWarning和InsecureP
- JetBrains家族IDE激活方式,PhpStom最新版激活
- System call in Linux
- Python 函数和类
- [Java]“语法糖”系列(一)之方法引用(Method References)
- 清华大学冯珺:基于强化学习的关系抽取和文本分类 | 实录·PhD Talk