Android完整的前后端交互参考案例

目录
  • API 连接获取(~~Api.java)
    • 文件创建
    • 文件内容
    • POST
    • Observable
    • 数据请求以及设定(~~Data.java)
    • 数据请求函数(public static class ~~~Request)
    • 数据返回列表函数( public static class ~~~List)
    • 成员变量
    • 返回数据列表设置函数
  • 数据请求以及设定
    • 数据请求
    • 数据显示
  • Adapter(适配器)设置

Android 前端获取数据并显示

API 连接获取(~~Api.java)

文件创建

新建Kotlin class/file 中的 Interface 文件。

文件内容

public interface CleaningDisinfectionApi {
    //综合查询清洗消毒列表
    @POST("formatdisinfection/getPage")
    Observable<CleaningDisinfectionData.CleaningDisinfectionInfoList> getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest);
}

POST

内容格式固定,内容根据结构文档请求不同数据组

@POST("formatdisinfection/getPage")

其格式固定,POST后内容代表根据接口文档进行填写。

Observable

Observable<CleaningDisinfectionData.CleaningDisinfectionInfoList> getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest);
CleaningDisinfectionData.CleaningDisinfectionInfoList

返回数据列表,数据内容根据需求自行设计

getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest)

函数格式确定,
Header为指定的内容,
Body是数据请求文件(~~~~~~Data.~~~~~~Request)对象,在此请求数据中,一般请求整个完整的对象数据组。
设置数据是根据不同的需求显示不同的数据。

数据请求以及设定(~~Data.java)

此部分主要完成利用Api接口,完成完整数据组的获取,以及根据不同需求设定不同的返回数据列表。

数据请求函数(public static class ~~~Request)

此函数请求完整的数据组。

即*根据接口文档参数内容,定义所有的成员变量,并于文档参数一一对应*,并定义其get和set方法。

private String date;//消毒日期
        private String amount;//餐具数量
        private  String coaCode;//企业许可证号
        private String coaName;//许可证企业名称
        private String entCreditCode;//企业社会信用代码
        private String enterpriseName;//企业名称
        private String name;//餐具名称
        private String way;//消毒方式
        private String person;//操作人姓名
        private String remark;//备注
        private String start;//开始日期
        private String end;//结束日期
        private String addTime;
        private String operator;
        private String operatorIp;
        private String operatorTime;

        private int id;
        private int start1;//开始时间 小时
        private int start2;//开始时间 分
        private int end1;//结束时间 小时
        private int end2;//结束时间  秒
        private int area;//企业所在区域
        private int caId;//从业人员ID

数据返回列表函数( public static class ~~~List)

public static class CleaningDisinfectionInfoList{
        private String MESSAGE;
        private String STATUS;
        private List<Data> data;

        public String getMESSAGE() {
            return MESSAGE;
        }

        public void setMESSAGE(String MESSAGE) {
            this.MESSAGE = MESSAGE;
        }

        public String getSTATUS() {
            return STATUS;
        }

        public void setSTATUS(String STATUS) {
            this.STATUS = STATUS;
        }

        public List<Data> getData() {
            return data;
        }

        public void setData(List<Data> data) {
            this.data = data;
        }

        public static class Data implements Serializable{
            private String date;//消毒日期
            private String enterpriseName;//企业名称
            private String amount;//餐具数量
            private String name;//餐具名称
            private int area;//企业所在区域

            public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }

            public String getEnterpriseName() {
                return enterpriseName;
            }

            public void setEnterpriseName(String enterpriseName) {
                this.enterpriseName = enterpriseName;
            }

            public String getAmount() {
                return amount;
            }

            public void setAmount(String amount) {
                this.amount = amount;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public int getArea() {
                return area;
            }

            public void setArea(int area) {
                this.area = area;
            }
        }
    }
}

成员变量

		private String MESSAGE;/
        private String STATUS;
        private List<Data> data;//变量类型为List,即将获取的数据以List返回

返回数据列表设置函数

public static class Data implements Serializable{
            private String date;//消毒日期
            private String enterpriseName;//企业名称
            private String amount;//餐具数量
            private String name;//餐具名称
            private int area;//企业所在区域
public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }
            ············

定义返回数据列表中的成员变量,并设定其getData和setData方法。

数据请求以及设定

数据请求

数据请求及设定在activity中完成。

private void getCleanDisinfetionData() {
        cleanningdisinfectionApi.getCleaningDisinfection(pageNo+":10", searchCleaningDisinfectionRequest)
                                .subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread())
                                .subscribe(new Observer<CleaningDisinfectionData.CleaningDisinfectionInfoList>() {
                                    @Override
                                    public void onSubscribe(Disposable d) {
                                        Log.d(TAG, "onSubscribe:");
                                    }

                                    @Override
                                    public void onNext( CleaningDisinfectionData.CleaningDisinfectionInfoList list) {
                                        Log.d(TAG, "onNext:");
                                        if (list != null&&list.getSTATUS().equals("200") && list.getData() != null) {
                                            cleanDisinfectionList.addAll(list.getData());
                                            setListData();
                                        }
                                    }

                                    @Override
                                    public void onError(Throwable e) { Log.d(TAG, "onError:" + e.getMessage());}

                                    @Override
                                    public void onComplete() {
                                        Log.d(TAG, "onComplete:");
                                    }
                                });
    }

数据请求操作格式固定,即在activity中调用~~~Api进行请求数据,并将请求到的数据返回到List中。

数据显示

private void setListData(){
        mainScroll.setAdapter(new CleaningDisinfectionAdapter(cleanDisinfectionList));
        if (RetrofitSingleton.dataNumber!=null){
            if (Integer.parseInt(RetrofitSingleton.dataNumber)<10000){
                resultNum.setText(RetrofitSingleton.dataNumber+"(家)");
            }
            else {
                resultNum.setText("10000+(家)");
            }
            if(cleanDisinfectionList.size()==Integer.parseInt(RetrofitSingleton.dataNumber)){
                Toast.makeText(FoodOperationSearchActivity.this,"已加载全部数据",Toast.LENGTH_SHORT).show();
                mRefreshLayout.setEnableLoadMore(false);
            }else {
                mRefreshLayout.setEnableLoadMore(true);
            }
        }
    }

数据显示模块,将请求到的数据传递到Adapter中,利用自己设置的Adapter完成数据显示。

Adapter(适配器)设置

package com.upc.txgc.intelligentmarket2021.Views;

import android.graphics.drawable.GradientDrawable;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.upc.txgc.intelligentmarket2021.HttpRequests.HttpObjects.CleaningDisinfectionData;
import com.upc.txgc.intelligentmarket2021.HttpRequests.HttpObjects.LicenseData;
import com.upc.txgc.intelligentmarket2021.R;
import com.zzhoujay.richtext.spans.LongClickable;
import org.greenrobot.eventbus.EventBus;

import java.util.List;

public class CleaningDisinfectionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private static final String TAG = "CleaningDisinfection";
    private final List<CleaningDisinfectionData.CleaningDisinfectionInfoList.Data> mData;

    public static class ItemClickListener implements View.OnClickListener {

        private CleaningDisinfectionData.CleaningDisinfectionInfoList.Data cleandisinfectionList;
        private int position;

        public void onClick(View v) {
            if (cleandisinfectionList != null) {
                Log.d(TAG, "position:" + position);
                EventBus.getDefault().post(cleandisinfectionList);

                //设置点击效果
                //statusChange(v);
            }
        }
    }

    public static class ScrollVH extends RecyclerView.ViewHolder {
        private View mView;
        private TextView enterpriseName;//企业名称
        private TextView enterpriseArea;//企业所在区域
        private TextView disinfectionDate;//消毒日期
        private TextView name;//物品名称
        private TextView amount;//物品数量
        GradientDrawable statusDrawable = new GradientDrawable();
        GradientDrawable licenseStatusDrawable = new GradientDrawable();

//创建自己的view
        public ScrollVH(View v) {
            super(v);
            mView = v;
            enterpriseName = v.findViewById(R.id.enterprise_name);
            enterpriseArea = v.findViewById(R.id.enterprise_area);
            disinfectionDate = v.findViewById(R.id.disinfection_date);
            name = v.findViewById(R.id.name);
            amount = v.findViewById(R.id.amount);
        }
    }
    //数据传递

    public CleaningDisinfectionAdapter(List<CleaningDisinfectionData.CleaningDisinfectionInfoList.Data>data){
        this.mData = data;
    }

    //绑定适配器界面
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.adapter_cleandisinfection, parent,
                        false);
        return new ScrollVH(view);
    }

    //设置数据
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ScrollVH) {

            ScrollVH viewHolder = (ScrollVH) holder;
            if (mData.get(position).getEnterpriseName() != null) {
                viewHolder.enterpriseName.setText(mData.get(position).getEnterpriseName());
            }
            if (mData.get(position).getDate() != null){
                viewHolder.disinfectionDate.setText(mData.get(position).getDate());
            }
            //if (mData.get(position).getArea() != null){
               // viewHolder.enterpriseArea.setText(mData.get(position).getArea());
            //}
            if (mData.get(position).getAmount() != null){
                viewHolder.amount.setText(mData.get(position).getAmount());
            }
            if(mData.get(position).getName()!=null){
                viewHolder.name.setText(mData.get(position).getName());
            }

        }
    }

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

将数据通过构造函数传递至适配器之中。

到此这篇关于Android完整的前后端交互参考案例的文章就介绍到这了,更多相关Android前后端交互内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android的简单前后端交互(okHttp+springboot+mysql)

    前言 前阵子发现了个有意思又好用的框架--okHttp.由于课程设计需要,无意间发现了这个框架,打算利用此框架与后端交互,可以参考前后端分离的项目,把android当做前端,springboot当做后端,以下是二者的简单交互. okHttp说明 (1)android网络框架之OKhttp 一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso) 用于替代HttpUrlConnection和Apache HttpClient (2)ok

  • Android完整的前后端交互参考案例

    目录 API 连接获取(~~Api.java) 文件创建 文件内容 POST Observable 数据请求以及设定(~~Data.java) 数据请求函数(public static class ~~~Request) 数据返回列表函数( public static class ~~~List) 成员变量 返回数据列表设置函数 数据请求以及设定 数据请求 数据显示 Adapter(适配器)设置 Android 前端获取数据并显示 API 连接获取(~~Api.java) 文件创建 新建Kotl

  • Django之提交表单与前后端交互的方法

    Django之META与前后端交互 1 提交表单之GET 前端提交数据与发送 1)提交表单数据 2)提交JSON数据 后端的数据接收与响应 1)接收GET请求数据 2)接收POST请求数据 3)响应请求 GET 请求过程 前端通过ajax发起GET请求,json格式数据 var data = { "name": "test", "age": 1 }; $.ajax({ type: 'GET', url: /your/url/, data: dat

  • Node之简单的前后端交互(实例讲解)

    node是前端必学的一门技能,我们都知道node是用的js做后端,在学习node之前我们有必要明白node是如何实现前后端交互的. 这里写了一个简单的通过原生ajax与node实现的一个交互,刚刚学node的朋友可以看一看.一方面理解服务端与客户端是如何交互的,一方面更熟悉node开发. 先贴代码:(有兴趣的可以copy到本地自己run一下) 主页面的html index.html: <!doctype> <html> <head> <meta charset=&

  • 详解Flask前后端分离项目案例

    简介 学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用 postman 调试.git 重构部分: ken校验模块 auths认证模块 scope权限模块,增加全局扫描器(参考flask HTTPExceptions模块) 收获 我们可以接受定义时的复杂,但不能接受调用时的复杂 如果你觉得写代码厌倦,无聊,那你只是停留在功能的实现上,功能的实现很简单,你要追求的是更好的写法,抽象的艺术,不是机械的劳动而是要 创造 ,要有自己的

  • Node.js前后端交互实现用户登陆的实践

    目录 一.项目需求 二,开始撸代码 1,创建前端页面(CSS样式此处省略) 2.Node.js后端获取用户输入数据 最近学习了一点Node.js的后端知识,于是作为一个学习前端方向的我开始了解后端,话不多说,开始介绍.首先,如果你想要更好的理解这篇博客,你需要具备html,css,javascript和Node.js基础以及少许的SQL数据库知识.接下我们开始这个小项目. 一.项目需求 要求用户进入登陆界面,输入用户名和密码后,后端获取用户输入的表单信息,通过从数据库查找,如果正确,跳转登陆成功

  • Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)

    Vue-CLI项目-axios模块前后端交互(类似ajax提交)08.31自我总结,内容如下: Vue-CLI项目-axios前后端交互 一.模块的安装 npm install axios --save #--save可以不用写 二.配置main.js import axios from 'axios' Vue.prototype.$axios = axios; 三.使用 created() { // 组件创建成功的钩子函数 // 拿到要访问课程详情的课程id let id = this.$ro

  • Springmvc和ajax如何实现前后端交互

    springmvc使用@RequestBody来获取前端的json字符串并转化为java对象 使用@ReponseBody来将返回的java对象转换为json形式返回前端 下面是几个使用springmvc和ajax进行前后端交互的简单实例 1.传递简单对象: 前端: $(function(){ $("#btn3").click(function(){ //准备好要发的数组 var array=[16,18,56]; var jsonArray=JSON.stringify(array)

  • Springboot项目中运用vue+ElementUI+echarts前后端交互实现动态圆环图(推荐)

    目录 如何运用vue+echarts前后端交互实现动态饼图 前言 一.环境配置 1.1 安装acharts 1.2 全局引用 二.圆环图前端实现 2.1 先在vue页面添加渲染盒子 2.2 前端逻辑实现部分 2.3 展示(可按自己需求更改前端样式) 三.前后端数据交互实现 3.1 创建数据库 3.2 后台代码的编写 如何运用vue+echarts前后端交互实现动态饼图 前言 我们做项目的时候,常常需要一些统计图来展示我们的数据,作为web开发人员,会实现统计图是我们必会的技能.我将带大家来实现动

  • Springboot运用vue+echarts前后端交互实现动态圆环图

    目录 前言 一.环境配置 1.1 安装acharts 1.2 全局引用 二.圆环图前端实现 2.1 先在vue页面添加渲染盒子 2.2 前端逻辑实现部分 2.3 展示(可按自己需求更改前端样式) 三.前后端数据交互实现 3.1 创建数据库 3.2 后台代码的编写 前言 我们做项目的时候,常常需要一些统计图来展示我们的数据,作为web开发人员,会实现统计图是我们必会的技能.我将带大家来实现动态饼图的实现 一.环境配置 1.1 安装acharts //npm也一样 cnpm install echa

随机推荐