MVP+okhttp+recyclerview

Happycapy深度解析:AI智能体的“iPhone时刻“来了? 从理论到实践深度解析了融合OpenClaw和ClaudeCode优点的超强智能体工具Happycapy 阅读详情

要用的依赖

implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.android.support:recyclerview-v7:28.0.0-alpha3'

要加权限

<uses-permission android:name="android.permission.INTERNET"/>

1.Modle

要展示两次数据,所以有两个bean

   1》第一个bean

public class SetMeal {
    public int id;
    public String name;
    public int restaurant_id;
    public String created_at;
    public  int __v;
    public List<Spus> spus;
}

2》第二个bean

public class Spus {
    

            public String _id;
            public int id;
            public int restaurant_id;
            public int category_id;
            public String name;
            public int praise_num;
            public String praise_content;
            public int month_saled;
            public String month_saled_content;
            public String pic_url;
            public int __v;
            public String created_at;

}

3》RootData

public class RootData {
    public int status;
    public String message;
    public List<SetMeal> data;
}

4》Util包(封装OKhttp)

ok类

public class OK {

    private static OK ok;

    private static OkHttpClient client;

    private static Handler handler;

    protected static Handler getHandler() {
        return handler;
    }

    private OK() {
        client = new OkHttpClient.Builder()
                //TODO 拦截器,打印日志
                .build();

        handler = new Handler();
    }

    /**
     * 获得单例
     *
     * @return
     */
    public static OK getOk() {
        if (ok == null) {
            synchronized (OK.class) {
                if (ok == null) {
                    ok = new OK();
                }
            }
        }
        return ok;
    }

    /**
     * GET方法
     */
    public void doGet(String url, Callback callback) {
        //组装请求
        Request request = new Request.Builder()
                .url(url)
                .build();

        //初始化调用类
        Call call = client.newCall(request);

        //加入请求队列,回调结果
        call.enqueue(callback);

    }

    /**
     * POST方法
     */
    public void doPost() {

    }

}

OkCallback类

public abstract class OkCallback implements Callback{

    public abstract void onUI(String json);//更新UI
    public abstract void onFailed(String json);//返回错误信息

    @Override
    public void onFailure(Call call,final IOException e) {
        OK.getHandler().post(new Runnable() {
            @Override
            public void run() {
                onFailed(e.getMessage());
            }
        });
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        final String json=response.body().string();//注意
        OK.getHandler().post(new Runnable() {
            @Override
            public void run() {
                onUI(json);
            }
        });

    }
}

 

5》ITask请求数据接口

public interface ITask {
    public void getListData(String url, OkCallback callback);
}

6.Task实现ITask

public class Task implements ITask {
    @Override
    public void getListData(String url, OkCallback callback) {
       OK.getOk().doGet(url,callback);
    }
}

2.Presenter层

1》抽的基类

public interface BasePre {
    public void onDestroy();
}

2》IPre

public interface IPre extends BasePre{
    public void getData();
}

3》MyPre

public class MyPre extends OkCallback implements IPre {
    //注入M
    ITask task;
    //注入V
    IView view;

    public MyPre(MainActivity activity){
        task=new Task();
        view=activity;
    }
    @Override
    public void getData() {
        //获取数据
        task.getListData("http://39.108.3.12:3000/v1/food/32",this);
    }

    @Override
    public void onDestroy() {
        //销毁视图
        view=null;
    }

    @Override
    public void onUI(String json) {
        //请求数据
        Gson gson=new Gson();
        RootData rootData = gson.fromJson(json, RootData.class);
        view.ShowData(rootData.data);
    }

    @Override
    public void onFailed(String json) {

    }
}

3》View层

1》IView

public interface IView {
    void ShowData(List<SetMeal>data);
}

2》适配器

左边适配器

public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.TextHolder>{
    private Context context;
    private List<SetMeal> list;

    ItemClickListener listener;

    public void setListener(ItemClickListener listener){
        this.listener=listener;
    }
    public LeftAdapter(Context context) {
        this.context = context;
        list=new ArrayList<>();
    }
    public void AddData(List<SetMeal> meals){
       this.list.addAll(meals);
       notifyDataSetChanged();

    }

    @NonNull
    @Override
    public TextHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.left_layout, viewGroup, false);
        return new TextHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull TextHolder textHolder, int i) {
        final SetMeal meal=list.get(i);
        textHolder.textView.setText(meal.name);
        textHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onItemClick(meal);
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

   class TextHolder extends RecyclerView.ViewHolder{
     TextView textView;
       public TextHolder(@NonNull View itemView) {
           super(itemView);
           textView=itemView.findViewById(R.id.textView);
       }
   }

   public interface ItemClickListener{
        void onItemClick(SetMeal meal);
   }
}

右边适配器

public class RightAdapter extends RecyclerView.Adapter<RightAdapter.RTextHolder> {
    private Context context;
    private List<Spus> list;

    public RightAdapter(Context context) {
        this.context = context;
        list=new ArrayList<>();
    }

    public void AddData(List<Spus>spuses){
        this.list.clear();
        this.list.addAll(spuses);
        notifyDataSetChanged();
    }


    @NonNull
    @Override
    public RTextHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(context).inflate(R.layout.right_layout,viewGroup,false);
        return new RTextHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RTextHolder rTextHolder, int i) {
        Spus spus=list.get(i);
        rTextHolder.textView2.setText(spus.name);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class RTextHolder extends RecyclerView.ViewHolder{
        TextView textView2;
        public RTextHolder(@NonNull View itemView) {
            super(itemView);
            textView2=itemView.findViewById(R.id.textView2);
        }
    }
}

主页面Activity

public class MainActivity extends AppCompatActivity implements IView{

    IPre pre;

    //左边
    RecyclerView leftRecycler;
    LeftAdapter adapter;
    //右边
    RecyclerView rightRecycler;
    RightAdapter rightAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        leftRecycler=findViewById(R.id.recycler);
        rightRecycler=findViewById(R.id.recycler2);
        //初始化
        pre=new MyPre(this);
        //加载数据
        pre.getData();
        initView();
    }

    private void initView() {
        //加载布局管理器
        leftRecycler.setLayoutManager(new LinearLayoutManager(this));
        //添加分割线
        leftRecycler.addItemDecoration(new DividerItemDecoration(this, OrientationHelper.VERTICAL));
        adapter=new LeftAdapter(this);
        leftRecycler.setAdapter(adapter);

        adapter.setListener(new LeftAdapter.ItemClickListener() {
            @Override
            public void onItemClick(SetMeal meal) {
                Toast.makeText(MainActivity.this,meal.name,Toast.LENGTH_SHORT).show();
                rightAdapter.AddData(meal.spus);
            }
        });

        //右边
        rightRecycler.setLayoutManager(new LinearLayoutManager(this));
        rightRecycler.addItemDecoration(new DividerItemDecoration(this, OrientationHelper.VERTICAL));
        rightAdapter=new RightAdapter(this);
        rightRecycler.setAdapter(rightAdapter);
    }

    @Override
    public void ShowData(List<SetMeal> data) {
        adapter.AddData(data);

        rightAdapter.AddData(data.get(0).spus);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        pre.onDestroy();
    }
}

4.xml文件

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    ></android.support.v7.widget.RecyclerView>
 <android.support.v7.widget.RecyclerView
     android:id="@+id/recycler2"
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:layout_weight="8"
     ></android.support.v7.widget.RecyclerView>

左边展示数据条目

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginStart="13dp"
    android:layout_marginTop="14dp"
    android:text="TextView" />

右边展示条目

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="15dp"
    android:text="TextView" />
选型不再靠感觉:一文看懂 SAP Event Mesh 与 SAP Integration Suite, advanced event mesh 的能力边界 本文对比分析了SAP Event Mesh与SAP Integration Suite, advanced event mesh的差异。SAP Event Mesh适合轻量级场景,主要用于SAP系统间异步通信,支持AMQP、MQTT等协议,消息大小限制为1MB。而advanced event mesh面向企业级事件网络,提供跨云/本地部署、事件治理、监控等高级功能,支持30MB消息和更大存储容量。选择时需考虑业务规模、实时性要求、治理需求等因素:单一SAP生态内扩展可选Event Mesh;跨区域、多云环境 阅读详情

相关推荐

VS2015与QT界面开发中解决‘ui_xxx.h‘文件类名不一致导致的编译错误

本文详细解析了在VS2015与QT界面开发中,因.ui文件顶层部件objectName与生成类名不一致导致'ui_xxx.h'文件出现'不完整的类型'编译错误的根本原因。通过分步排查,指导开发者统一Qt设计师对象名、自动生成文件类名及代码引用名,并提供强制重新编译UI文件、清理中间文件等解决方案,有效解决此类常见编译问题。

weixin_29009339的博客 248

OkHttp3详细使用教程

OkHttp官网地址:http://square.github.io/okhttp/ OkHttp GitHub地址:https://github.com/square/okhttp implementation(&amp;amp;amp;amp;amp;quot;com.squareup.okhttp3:okhttp:3.12.0&amp;amp;amp;amp;amp;quot;) get同步请求 /** * 放在子线程中执行 */

qq_36699930的博客 7790

从FOC到你的无人机:深入浅出讲透Clark/Park变换在无刷电机控制中的核心作用

本文深入解析Clark变换与Park变换在无刷电机控制中的核心作用,揭示其如何将三相交流电转换为旋转坐标系下的直流量,实现无人机电机的高效精准控制。通过STM32硬件加速和工程实践案例,展示这对数学变换如何成为FOC算法的神经中枢,大幅提升系统响应速度和能效表现。

weixin_42628941的博客 169

okhttp3简单使用

文章目录一、简介1、特性二、导入依赖三、创建 get 请求四、创建 post 请求五、创建异步请求(MultipartBody 表单)六、FormBody 表单参数七、OkhttpConfig 配置类八、OkhttpUtil 工具类九、小结 一、简介 Square 公司开源的 OkHttp okhttp 官网 https://square.github.io/okhttp/ 1、特性 1)支持HTTP2,对一台机器的所有请求共享同一个socket连接(同域名下所有通信都在单个连接上完成,消除了因多个连接而带

不懂一休 1万+

电路课设-音响分频器电路设计

(一)题目简介 1.一阶分频器电路设计 假定高音和低音扬声器均等效为 16 欧姆电阻,设计如图 2 的简单分频器电 路,要求高低频分界(两个滤波器的截止频率)为 5kHz。 1) 写出高音扬声器和低音扬声器电压对于 vs 的传递函数,确定电路中电 容 C 和电感 L 的元件值;2)利用 AC 频率扫描分析求出两个扬声器电压的频率响应曲线,验证计算 结果。用包含高低频成分的电压 vs 激励进行测量验证。 3)计算并利用 EWB 仿真证明从 vs 看进去的阻抗为一常数 16 欧姆。

weixin_53507617的博客 1万+

Oracle 查看 rman 备份情况 SQL 语句

每天一个 DBA 小知识,助你更进一步!

LuciferLiu_DBA 3119

从源码角度深入理解OKHttp3

从源码角度深入理解OKHttp3

idaretobe的专栏 807

C#里用HttpListener实现WEB API接口服务端

本文介绍了一个基于WinForm的HTTP服务实现方案。该方案使用HttpListener类创建了一个支持JSON POST请求处理的轻量级Web服务器,主要特点包括:1) 纯线程方式实现请求监听和处理;2) 提供标准化的JSON响应格式;3) 支持自定义请求处理逻辑;4) 包含完整的日志记录功能。代码示例展示了如何初始化服务、处理不同类型的请求(包括JSON POST),并提供了线程安全的UI更新机制。该实现适用于需要简单HTTP接口的Windows桌面应用程序,可作为程序间通信的基础设施。

大坡3D软件开发 228

Android studio implementation ‘com.squareup.okhttp3:okhttp:4.9.0‘却无法使用的问题

需要使用okhttp,于是在build.gradle的dependencies中添加: implementation 'com.squareup.okhttp3:okhttp:4.9.0' 发现无法使用okhttp的Request对象。 查了很多资料,似乎都没有人说这个问题,我找到了经过一晚上的折腾发现原因在于okhttp的版本与目前编译器版本(3.0)不适配,引用低版本的即可。 implementation 'com.squareup.okhttp3:okhttp:4.0.0' ...

weixin_52753940的博客 6966

从菜鸟到大神:VSCode助力HTML开发全攻略

本文全面介绍 VSCode 在 HTML 开发中的高效应用。先引导读者完成 VSCode 的安装与个性化设置,助其快速适应开发环境;接着推荐 Live Server、Prettier 等实用插件,实现实时预览、代码格式化等功能,提升开发效率。通过详细的开发实战步骤,从新建文件到添加样式,带领读者掌握 HTML 基础结构与常用标签使用。还分享代码片段管理、多人协作等进阶技巧,解决常见开发问题。旨在帮助开发者利用 VSCode,轻松高效完成 HTML 开发,打造优质网页。

邓邓子的博客 3368

[自动化工具] 解放双手的利器:「自动邮件平台」工具助你高效搞定重复通知任务

摘要:自动邮件平台是一款零门槛自动化工具,帮助用户高效处理重复性邮件任务。该平台支持两种调度模式(指定日期和间隔天数),无需编码即可快速设置账单提醒、活动通知等任务。提供免费托管版(小时级调度)和自主部署版(分钟级调度),满足不同精度需求。典型应用场景包括客户跟进、系统监控等周期性任务。用户只需三步即可完成设置,还能扩展定制化功能。该工具让非技术人员也能轻松实现邮件自动化,释放时间专注更重要的工作。

每日出拳老爷子的博客 109

Java封装OkHttp3工具类

Java封装OkHttp3工具类比HttpClient3和4都香废话少说直接上代码 废话少说直接上代码 //引入maven <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.10.0</version> </dependency> <depen

qq_40812553的博客 1302

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MVP模式OKhttp请求RecyclerView展示数据

这是一个与OKhttp和RecyclerView相关的小demo,可以搜索(此接口只能输入手机或笔记本),切换布局,如果你不明白的话去看一下京东(大言不惭)。demo用MVP模式写成,OKhttp请求数据,RecyclerView展示数据,SpringView实现刷新和加载更多。

huangaolu的博客 1610

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RecyclerView+MVP+OKhttp

这是一个RecyclerView的案例,用到了OKhttp和MVP,下面先看一下MainActivity public class MainActivity extends AppCompatActivity implements Iview { MyPresenter presenter; private RecyclerView mRcv; PhoneB

huangaolu的博客 1063

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MVP+Okhttp网络请求+动画+RecyclerView

相关依赖: 在 build.gradle上加入 configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -&amp;amp;amp;amp;amp;amp;gt; def requested = details.requested if (requested.group == ‘com.android.support’) ...

FriggingAwesome的博客 477

Retrofit2 + RxJava + Okhttp + RecyclerView用MVP架构展示数据

写代码思路流程: //1.权限和依赖 //2.布局文件 //3.生成实体bean类 //4.封装工具类 Retrofit + RxJava + OkHttp //5.搭建MVP架构 //6.创建适配器 //7.在Activity或者Fragment中进行加载布局管理器和绑定适配器 效果图: a.添加联网权限: uses-permission an

weixin_39779085的博客 642

OKhttp,MVP,RecyclerView,联合使用,点击条目进入详情页

布局 ----------------------------------------------------------MainActivity.xml---------------------------------------------------------- xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:an

天纵神武的博客 668

An_MVP_模式(okhttp)解析RecyclerView/XRecyclerView

运用MVP模式写(okhttp)解析json,数据传输到RecyclerView中 一、三个层Model,view,Presenter; 二、导入okhttp,okio,RecyclerView依赖;compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.squareup.okio:okio:1.13.0' compile 'com.an

en_hlj的博客 268

fresco+mvp+okhttp+recyclerview多条目

//导包 compile 'com.android.support:recyclerview-v7:27.1.1' compile 'com.facebook.fresco:fresco:1.9.0' compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.2'//...

Androidoux98的博客 321

RecyclerView +Mvp +OkHttp

1.   在MVp包下的  Model包下  创建 MainModel 类     Model主要用于联网请求数据2.  在MVp包下的 View包下 创建MainView 类3.   在MVP包下的Presenter包下 创建 MainPresenter 类4.   在在MVp包下的 View包下创建activity包,然后在包下创建 MainActivity5.  创建包名为Base,下面一共...

qq_41637459的博客 183

mvp,okhttp,recyclerview

package com.exbawei.liteli.myfulian; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.

sweetliteli的博客 282

MVP+okhttp接口解析RecyclerView展示

它用到的依赖: mplementation 'com.squareup.okhttp3:okhttp:3.6.0' implementation 'com.squareup.okio:okio:1.11.0' implementation 'com.google.code.gson:gson:2.8.5' implementation 'com.android.support:appcompa...

Android_Mr_Zhao的博客 737

MVP操作RecyclerView多条目SpringView,OKHttp封装请求网络

build.gradle导入依赖 apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.1" defaultConfig { applicationId "com.example.lianxiday10_myp_rec

thw_m的博客 459

Kotlin-Android开发之MVP模式+OkHttp3+RecyclerView下拉刷新和上滑加载更多框架封装

前言:没有万能的框架,也没有万能的模版,我们需要做的就是根据需求选对框架,然后进行修改,最终达到自己的目的。相信你通过《Kotlin&Java-Android开发之MVP模式+Retrofit2.0框架封装》和《Kotlin-Android开发之MVP模式+Retrofit2.0+RxJava1.0+Dagger2框架封装》这两篇博客,对MVP模式、网络的访问有个比较全面的理解,但是上述两...

等待着冬天的风的博客 1332

MVP简单实现OKHttp+recyclerview+springview

需要添加的依赖 compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.liaoinstan.springview:library:1.2.6' compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.6.2'

weikai_的博客 726

购物车页面实现 :Okhttp+mvp+RecyclerView

1.清单文件配置请求网络权限:&lt;!--网络请求的权限--&gt; &lt;uses-permission android:name="android.permission.INTERNET"/&gt;2.设置依赖:1.Okhttp(网络请求); 2.RecyclerView(条目展示); 3.Glide(请求图片); 4.Gson(解析)compile 'com.squareup.okhtt...

陌默 418
上一篇: MVP模式
下一篇: 搜索框+流式布局
Android_ZMY
博客等级 码龄8年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值