Android 读取本地数据进行本地开发

news2024/11/18 14:37:10

前言

在日常开发当中,API接口还没有部署,但是UI已经出来了,这时候往往都会使用本地数据进行功能界面的搭建,这样往往能很大程度节约开发时间,工具类拿来直接用,话不多说,开整

一、项目搭建

1 创建项目

 2 下一步 项目名称 My15 语言 java 直接finish 创建完成

 3 创建好项目后  右键 main  创建资本地济源文件目录 选择如下

 

 4 继续选择assets 回车 创建完成

5 点击assets 右键创建一个file 文件 名叫 JsonData.json 这个json 文件就是放本地Json 数据的 根据服务器的格式进行放入 ,项目已经搭建完成 接下来就是使用

二、使用步骤

1.引入库

在app 下的build 下添加

api("com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30") 

api("com.google.code.gson:gson:2.8.6")

在项目跟目下的build 下添加仓库

maven { url 'https://jitpack.io' }

2.工具类

my15 右键创建 Tools 文件 ,改文件就是读取本地数据的工具类

public class Tools {

    /**
     * 读取本地资源文件
     *
     * @param context  上下文
     * @param fileName 本地数据文件名
     * @return
     */
    public static String getFromAssets(Context context, String fileName) {
        InputStreamReader inputReader = null;
        BufferedReader bufReader = null;
        try {
            inputReader = new InputStreamReader(context.getResources().getAssets().open(fileName));
            bufReader = new BufferedReader(inputReader);
            String line = "";
            StringBuilder result = new StringBuilder();
            while ((line = bufReader.readLine()) != null)
                result.append(line);
            return result.toString();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputReader != null) {
                    inputReader.close();
                }
                if (bufReader != null) {
                    bufReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "";
    }

}

3 使用步骤

1  my15 右键创建一个名为 JsonAdapter 的适配器 依次展示的是 车次类型 跟时间 ,实体类以及布局文件 在下面

public class JsonAdapter extends BaseQuickAdapter<JsonBean.DataBean.ResultBean, BaseViewHolder> {

    public JsonAdapter(int layoutResId, @Nullable List<JsonBean.DataBean.ResultBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, JsonBean.DataBean.ResultBean item) {

        helper.setText(R.id.cc_tv, "车次:" + item.getTrain());
        helper.setText(R.id.name_tv, "类型:" + item.getName());
        helper.setText(R.id.time_tv, "时间:" + item.getTime());


    }
}

2 穿件布局文件 text_item_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="140dp"
    android:background="@drawable/linearlayout_underline"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/cc_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="15dp"
            android:text="车次" />

        <TextView
            android:id="@+id/name_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="15dp"
            android:text="和谐号" />


    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center_vertical">

        <TextView
            android:id="@+id/time_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:text="2020-10-12" />

    </LinearLayout>


</LinearLayout>

3 根据本地Json 数据生成实体类 JsonBean

public class JsonBean {

    private String code;
    private String message;
    private DataBean data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        private List<ResultBean> result;

        public List<ResultBean> getResult() {
            return result;
        }

        public void setResult(List<ResultBean> result) {
            this.result = result;
        }

        public static class ResultBean {
            private String train;
            private String name;
            private String time;

            public String getTrain() {
                return train;
            }

            public void setTrain(String train) {
                this.train = train;
            }

            public String getName() {
                return name;
            }

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

            public String getTime() {
                return time;
            }

            public void setTime(String time) {
                this.time = time;
            }
        }
    }
}

4 最后就是使用了 ,也很简单 在MainActivity 中使用如下

public class MainActivity extends AppCompatActivity {


    private List<JsonBean.DataBean.ResultBean> jsonList = new ArrayList<>();
    private JsonAdapter jsonAdapter;
    private RecyclerView jsonRv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        jsonRv = findViewById(R.id.json_list);

        String fromAssets = Tools.getFromAssets(this, "JsonData.json");
        JsonBean jsonBean = new Gson().fromJson(fromAssets, JsonBean.class);
        jsonList = jsonBean.getData().getResult();

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        jsonRv.setLayoutManager(layoutManager);
        jsonAdapter = new JsonAdapter(R.layout.text_item_layout, jsonList);
        jsonRv.setAdapter(jsonAdapter);
        jsonAdapter.notifyDataSetChanged();


    }
}

5 最后看下 运行截图

总结

兵马未动,粮草先行 ,做好提前规划,才能更胜一筹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web应用技术(第十四周/持续更新)

本次练习基于how2j和课本,初步认识Spring。 以后我每周只写一篇Web的博客&#xff0c;所以的作业内容会在这篇博客中持续更新。。。 一、Spring基础1.Spring概述:2.Sring组成&#xff1a;3.BeanFactory&#xff1a;4.控制反转&#xff1a;5.依赖注入&#xff1a;6.JavaBean与S…

学习Java可以从事什么岗位(合集)

学习Java可以从事什么岗位 学习Java可以从事的岗位 Java可以做网站 Java可以用来编写网站&#xff0c;现在很多大型网站都用Jsp写的&#xff0c;JSP全名Java Server Pages 它是一种动态网页技术&#xff0c;比如我们熟悉的163&#xff0c;一些政府网站都是采用JSP编写的。 所以…

MySQL小练习(使用JDBC操作数据库)

题目&#xff1a; 1.创建一个数据库(学号姓名缩写,如: 2020001zs)在数据库中创建一张表 (五个以上字段) ; 2.使用JDBC(使用PreparedStatement接口) 操作数据库对表中的数据进行增删改查操作 目录 一、数据库 1.创建数据库 2.创建表 3.添加数据 二、JDBC 1.准备环境 2.查询…

TCO-PEG-Thiol,反式环辛烯聚乙二醇巯基,具有末端硫醇基团的双功能TCO PEG衍生物

产品描述&#xff1a; TCO PEG Thiol是具有末端硫醇基团的双功能TCO PEG衍生物。TCO&#xff08;反式环辛烯&#xff09;基团与四嗪基团快速有效地反应&#xff0c;而硫醇&#xff08;巯基&#xff09;可用于与马来酰亚胺反应&#xff0c;与金表面结合并参与许多其他反应。 TC…

DOTA PSMA,1702967-37-0,PSMA-617,特异性膜抗原 (PSMA) 的强有效抑制剂

产品描述&#xff1a; DOTA-PSMA是Prostate特异性膜抗原 (PSMA) 的强有效抑制剂&#xff0c;其 Ki 值为 0.37 nM。DOTA-PSMA由三种成分组成:药效基团Glutamate-urea-Lysine&#xff0c;螯合剂DOTA&#xff08;能够结合68Ga或177Lu&#xff09;&#xff0c;以及连接这两个实体的…

sftp配置免密以及权限配置

场景&#xff1a;机器A通过sftp免密登录机器B 机器A有用户redis、 nginx, 机器B有用户monitor、 bak用户 需求&#xff1a;机器A在nginx用户环境下&#xff0c;sftp机器B的bak目录 注意&#xff1a;因为sshd为了安全&#xff0c;对属主的目录和文件权限有所要求。如果权限…

[LitCTF 2023]ssvvgg(Steghide爆破)

题目是一张.svg的图片 关于SVG的简介&#xff1a; SVG格式文件是可缩放矢量图形文件的缩写&#xff0c;是一种标准的图形文件类型&#xff0c;用于在互联网上渲染二维图像。与其他流行的图像文件格式不同&#xff0c;SVG格式文件将图像存储为矢量&#xff0c;这是一种基于数学…

SpringCloud(27):授权控制实现

很多时候&#xff0c;我们需要根据调用来源来判断该次请求是否允许放行&#xff0c;这时候可以使用 Sentinel 的来源访问控制&#xff08;黑白名单控制&#xff09;的功能。来源访问控制根据资源的请求来源&#xff08;origin&#xff09;判断资源访问是否通过&#xff0c;若配…

运营-18.积分体系概念

积分体系是一种通过平台补贴来提升用户忠诚度、为平台各项业务的导流的运营手段&#xff1b; 作用 1. 积分体系可以引导用户逐渐投入沉没成本&#xff0c;包括时间、精力和金钱&#xff1b; 2. 沉没成本越高&#xff0c;用户越难以离开&#xff1b; 3. 积分体系可以给其他业务导…

数据库实训心得体会_数据库实习个人总结

数据库实训心得体会篇一一个月的数据库实训就转眼间就上完了&#xff0c;期间讲解了一个学生管理系统&#xff0c;最后还做了一个小的数据库链接作业。现在就说说关于vb链接的数据库的一些方法。 首先说数据库&#xff0c;简单的说就是建表格,然后把一张一张的表格和在一起,成为…

nginx判断访问的是不是index.html如果是且index.html存在直接返回

可以通过以下配置实现此功能&#xff1a; 复制server {listen 80;server_name example.com;root /var/www/example.com;index index.html;location / {try_files $uri $uri/ index;}location index {if (-f $document_root/index.html) {return 200;}rewrite ^ /index.html la…

Spring源码(一) — 序言

序言 Java程序员的日常开发一定都离不开Spring的框架&#xff0c;从Spring、SpringMVC、SpringBoot、SpringCloud… 而Spring框架就是Spring家族中最基础也是最重要的一个框架。 Spring 我们常说的Spring往往都绕不开IOC&#xff08;控制反转&#xff09;和AOP&#xff08;切…

Zebec生态进展迅速,频被BitFlow、Matryx DAO等蹭热度碰瓷

进入到 2023 年以来&#xff0c; Zebec 生态的整体发展突飞猛进&#xff0c;除了流支付协议 Zebec Protocol 不断通过收购来扩大自身流支付业务、与万事达等合作推出 Zebec Card 等在支付业务上&#xff0c;实现进展外&#xff0c;其社区驱动的Layer3 模块化链 Nautilus Chain …

GP-NFC-Management of Multiple Secure Elements

GP_Mobile Task Force Requirements for NFC Mobile Management of Multiple Secure_Elements_v1.0.pdf 一、简介 在不久的将来&#xff0c;NFC 非接触式手机有望变得无处不在。 它们将用作支付卡、交通票、忠诚卡、访问控制徽章和许多其他非接触式服务卡。 一些试点已经在全…

CNN详细学习

前馈神经网络 常见激活函数 sigmoid函数 梯度消失与爆炸 通用逼近定理 根据通用近似定理&#xff0c;对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成的前馈神经网络 只要其隐藏层神经元的数量足够&#xff0c;它可以以任意的精度来近似任何从一个定义…

java矢量切片实现

概述 可通过多种方式实现矢量切片的制作&#xff0c;前面讲到了基于postgis数据库、tippecanoe、Qgis等方式&#xff0c;本文讲述基于spring Boot框架下java的实现。 实现效果 实现代码 后端代码 引入依赖 <dependency><artifactId>giscat-vector-mvt</art…

Microsoft Office 2021安装

哈喽&#xff0c;大家好。今天一起学习的是office2021的安装&#xff0c;有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统&#xff1a;Windows 11 支持Win10安装&#xff0c;不支持Win7、XP系统 系统类型&#xff1a;64位 演示版本&#xff1a;cn_office_…

公有云弊端尽显,“云回迁”真的来了吗?

5到10年前&#xff0c;如果一家企业制定数字化转型战略&#xff0c;那么这项战略的核心大概率是将业务迁移上云。 现在&#xff0c;多数企业的业务已在云中“开花结果”&#xff0c;与以往不同的是&#xff0c;原先的一“朵”云变成了一“片”云。 没错&#xff0c;多云战略正…

Java集合底层原理总结

文章目录 一、集合分类二、遍历集合方式三、单列集合3.1 List3.1.1 ArrayList底层分析3.1.2 LinkedList底层分析 3.2 Set3.2.1 HashSet&#xff08;无序&#xff09;底层分析3.2.2 LinkedHashSet&#xff08;有序&#xff0c;存取一致&#xff09;3.2.3 TreeSet&#xff08;可排…

[LitCTF 2023]easy_shark

下载附件解压出现密码提示 使用010editor打开&#xff0c;发现frflags和deflags都被修改了&#xff0c;这就会造成压缩包伪加密 将它们都改回0&#xff0c;另存为再打开&#xff0c;不再出现密码提示 使用wirshark打开 过滤http并追踪&#xff0c;在最后一个包里找到了类似fla…