安卓讲课笔记6.1 共享参数

news2024/10/6 16:31:09

文章目录

  • 零、本讲学习目标
  • 一、导入新课
  • 二、新课讲解
    • (一)数据存储
    • (二)共享参数
      • 1、共享参数概述
      • 2、利用共享参数读写文件步骤
    • (三)案例演示:多窗口共享数据
      • 1、创建安卓应用
      • 2、准备图片素材
      • 3、主界面类更名
      • 4、创建第二界面类
      • 5、字符串资源文件
      • 6、第一界面布局资源文件
      • 7、第二界面布局资源文件
      • 8、第一界面类实现功能
      • 9、第二界面类实现功能
      • 10、启动应用,查看效果
      • 11、查看保存数据的文件
      • 12、导出文件到本地电脑
  • 三、归纳总结
  • 四、上机操作

零、本讲学习目标

  1. 掌握共享参数属性与方法
  2. 能利用共享参数读写文件

一、导入新课

  • 安卓应用难免会遇到数据存储问题,安卓提供了多种数据存储的方式。

二、新课讲解

(一)数据存储

  • 共享参数
  • 文件流操作
  • SQLite应用
  • XML与JSON解析
  • 安卓应用资源

(二)共享参数

1、共享参数概述

  • 安卓提供了一种简单的数据存储方式SharedPreferences [共享偏好],这是一种轻量级的数据保存方式,用来存储一些简单的配置信息,以键值对的方式存储在一个XML文件中。

2、利用共享参数读写文件步骤

  • 利用Activity的getPreferences(name, mode)方法得到SharedPreferences对象
  • 使用SharedPreferences对象的edit()得到Editor对象
  • 利用Editor对象的putXxx()方法实现数据写入;利用SharedPreferences对象的getXxx()实现数据读取
  • 对于写入操作,利用Editor对象的commit()方法提交数据到指定的文件里

(三)案例演示:多窗口共享数据

1、创建安卓应用

  • 基于Empty Activity模板创建安卓应用 - ShareData
    在这里插入图片描述
  • 单击【Finish】按钮
    在这里插入图片描述

2、准备图片素材

  • 将背景图片拷贝到drawable目录
    在这里插入图片描述

3、主界面类更名

  • MainActivity更名为FirstActivity,对应的布局文件actiivty_main.xml更名为activity_first.xml
    在这里插入图片描述

4、创建第二界面类

  • 基于Empty Activity模板创建第二界面类
    在这里插入图片描述
  • 单击【Finish】按钮
    在这里插入图片描述

5、字符串资源文件

  • 字符串资源文件 - strings.xml
    在这里插入图片描述
<resources>
    <string name="app_name">多窗口共享数据</string>
    <string name="write_data">写入数据</string>
    <string name="read_data">读取文件</string>
    <string name="jump_to_second">跳转第二个窗口</string>
</resources>

6、第一界面布局资源文件

  • 第一界面布局资源文件 - activity_first.xml
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background1"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".FirstActivity">

    <Button
        android:id="@+id/btn_write_data"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:onClick="doWriteData"
        android:text="@string/write_data"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_jump_to_second"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:onClick="doJumpToSecond"
        android:text="@string/jump_to_second"
        android:enabled="false"
        android:textSize="20sp" />
</LinearLayout>
  • 查看预览效果
    在这里插入图片描述

7、第二界面布局资源文件

  • 第二界面布局资源文件 - activity_second.xml
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background2"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".SecondActivity">

    <Button
        android:id="@+id/btn_read_data"
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:text="@string/read_data"
        android:onClick="doReadData"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/tv_person_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textSize="20sp"/>
</LinearLayout>
  • 查看预览效果
    在这里插入图片描述

8、第一界面类实现功能

  • 第一界面类 - FirstActivity
    在这里插入图片描述

  • 声明变量和常量
    在这里插入图片描述

  • 获取共享参数对象
    在这里插入图片描述

  • 获取编辑器对象
    在这里插入图片描述

  • 编写【写入数据】按钮单击事件处理方法
    在这里插入图片描述

  • 编写【跳转到第二个窗口】按钮单击事件处理方法
    在这里插入图片描述

  • 查看完整源代码

package net.hw.share_data;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class FirstActivity extends AppCompatActivity {

    private static final String NAME = "person_info"; // 配置文件名
    private static final int MODE = Context.MODE_PRIVATE; // 文件访问模式
    private SharedPreferences sp; // 共享参数对象
    private SharedPreferences.Editor editor; // 编辑器对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_first);

        // 获取共享参数对象
        sp = getSharedPreferences(NAME, MODE);
        // 获取编辑器对象
        editor = sp.edit();
    }

    /**
     * 【写入数据】按钮单击事件处理方法
     *
     * @param view
     */
    public void doWriteData(View view) {
        // 将数据写入编辑器
        editor.putString("name", "华卫");
        editor.putString("gender", "男");
        editor.putInt("age", 50);
        editor.putString("hobby", "编程、音乐、阅读");
        // 提交数据,写入到指定的文件
        if (editor.commit()) {
            Toast.makeText(this, "恭喜,数据写入文件成功!", Toast.LENGTH_SHORT).show();
            findViewById(R.id.btn_jump_to_second).setEnabled(true); // 让【跳转到第二个窗口】按钮可用
        } else {
            Toast.makeText(this, "遗憾,数据写入文件失败!", Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 【跳转到第二个窗口】单击事件处理方法
     *
     * @param view
     */
    public void doJumpToSecond(View view) {
        // 创建跳转到第二个窗口的意图
        Intent intent = new Intent(this, SecondActivity.class);
        // 按意图启动第二个窗口
        startActivity(intent);
    }
}

9、第二界面类实现功能

  • 第二界面类 - SecondActivity
    在这里插入图片描述

  • 定义常量和变量
    在这里插入图片描述

  • 通过控件资源标识符获得控件实例
    在这里插入图片描述

  • 获取共享参数对象
    在这里插入图片描述

  • 编写【读取数据】按钮单击事件处理方法
    在这里插入图片描述

  • 查看完整代码

package net.hw.share_data;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    private static final String NAME = "person_info"; // 配置文件名
    private static final int MODE = Context.MODE_PRIVATE; // 文件访问模式
    private SharedPreferences sp; // 共享参数对象
    private TextView tvPersonInfo; // 个人信息标签

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_second);

        // 通过控件资源标识符获得控件实例
        tvPersonInfo = findViewById(R.id.tv_person_info);
    }

    /**
     * 【读取数据】单击事件处理方法
     *
     * @param view
     */
    public void doReadData(View view) {
        // 通过共享参数对象读取文件数据
        String name = sp.getString("name", "");
        String gender = sp.getString("gender", "");
        int age = sp.getInt("age", 0);
        String hobby = sp.getString("hobby", "");
        // 创建个人信息字符串生成器
        StringBuilder builder = new StringBuilder();
        builder.append("姓名:" + name + "\n")
                .append("性别:" + gender + "\n")
                .append("年龄:" + age + "\n")
                .append("爱好:" + hobby);
        // 获取个人信息字符串
        String personInfo = builder.toString();
        // 通过吐司显示个人信息
        Toast.makeText(this, personInfo, Toast.LENGTH_SHORT).show();
        // 将个人信息显示在标签里
        tvPersonInfo.setText(personInfo);
    }
}

10、启动应用,查看效果

  • 首先写入数据到文件,然后跳转到第二个窗口,最后读取文件数据
    在这里插入图片描述

11、查看保存数据的文件

  • View | Tool Windows | Device File Explorer
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

12、导出文件到本地电脑

  • 将个人信息文件另存到本地电脑
    在这里插入图片描述
    在这里插入图片描述
  • 利用Notepad++打开
    在这里插入图片描述

三、归纳总结

  • 回顾本节课所讲的内容,并通过提问的方式引导学生解答问题并给予指导。

四、上机操作

  • 形式:单独完成
  • 题目:利用共享参数实现用户注册
  • 要求:1、创建两个窗口:注册窗口(包含姓名、性别、年龄和爱好信息)、显示注册信息;
    2、单击注册窗口的【注册】按钮,利用共享参数保存注册信息,并且跳转到显示注册信息窗口;3、在显示注册信息窗口通过共享参数读取各项注册信息并且显示在标签控件里。

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

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

相关文章

【LeetCode每日一题】——141.环形链表

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 链表 二【题目难度】 简单 三【题目编号】 141.环形链表 四【题目描述】 给…

【gbase8a】docker搭建gbase8a,详细【图文】

docker搭建gbase8a安装docker安装GBase 8a查询安装的版本拉取镜像启动进入容器创建用户dbever测试安装docker 其中具有docker的搭建 搭建docker&#xff0c;docker搭建达梦数据库&#xff0c;详细【图文】 https://blog.csdn.net/weixin_44385419/article/details/127738868 d…

Spark 数据倾斜调优10策

一、数据倾斜概述 1.1 什么是数据倾斜 对Hadoop、Spark、Flink这样的大数据系统来讲&#xff0c;数据量大并不可怕&#xff0c;可怕的是数据倾斜。 何谓数据倾斜&#xff1f;数据倾斜指的是&#xff0c;并行处理的数据集中&#xff0c;某一部分&#xff08;如Spark或Kafka的…

@SpringBootApplication中的注解

Target(ElementType.TYPE)&#xff1a;指示适用注释类型的上下文&#xff08;即注解的作用目标&#xff09;这里是接口、类、枚举、注解 Retention(RetentionPolicy.RUNTIME)&#xff1a;指示具有注释类型的注释要保留多长时间&#xff0c;这里注解是将被JVM保 留,所以在运行…

无法安装64位版本的office,因为在您的PC上找到以下32位程序

无法安装64位版本的office,因为在您的PC上找到以下32位程序: 请卸载所有32位office程序&#xff0c;然后重试安装64位office。如果想要安装32位office&#xff0c;请运行32位安装程序。 那为什么会出现这种情况呢&#xff1f; 首先&#xff0c;我们要知道我们的电脑是32位的还…

9个发展您的B2B业务的LinkedIn营销策略

没有比在 LinkedIn 上与其他公司建立联系更好的地方了。您可以与数以百万计的品牌和专业人士建立联系并发展您的业务。 您可以尝试多种不同的 B2B LinkedIn营销策略&#xff0c;以便与您的受众建立联系并将他们转变为您的客户。 事实上&#xff0c;根据公司自己的研究&#x…

Vue3.2中的setup语法糖(易懂)

简介 在vue3中删除了vue2中的data函数&#xff0c;因此&#xff0c;vue3.0要在template中使用某些变量就必须在最后return出来&#xff0c;多次声明变量&#xff0c;不太方便。而在vue3.2版本之后&#xff0c;新增了setup语法糖。 直接在script标签中添加setup属性就可以直接使…

Arduino开发实例-DIY电能表

DIY电能表 在本文中,将展示如何制作一个基于 Arduino 的功率和电能表。应用使用 INA219 电流传感器测量电流、功率和能耗,并将其显示在 OLED 显示屏上。 可以在 OLED 显示屏上查看您的电压、电流、功率和能量数据。 1、INA219介绍 INA219 电流传感器是一款支持 I2C 的基于…

Unity手机游戏发热发烫优化指南与技巧

Unity手机游戏发热发烫优化指南与技巧 很多小伙伴做完游戏后&#xff0c;发布到Android,运行&#xff0c;游戏很流畅&#xff0c;也不卡顿&#xff0c;但是跑一会游戏,手机就发热,发烫。客户提出需求&#xff0c;能否让它不发烫? 本文从以下3方面来分析手机发烫的问题&#x…

如何用一颗芯片实现5V转正负12V

有时在一些运算放大电路中我们需要同时有正电源和负电源&#xff0c; 但是我们输入一般只有一个正电源&#xff0c;比如我们输入的电源是5V&#xff0c;但是需要将5V转换成正负12V 5V转12V的话我们可以用BOOST电路进行升压&#xff0c;电路图如下 而5V转-12V的话一般有负压电荷…

osgEarth示例分析——osgearth_tracks

前言 osgearth_tracks示例&#xff0c;演示了所有图标沿着路径进行移动(路径是不可见的)。 执行效果 执行命令&#xff1a;osgearth_tracksd.exe earth_image\world.earth 右下角的控制面板功能&#xff1a; Declutter 是否开启 【清理器】 功能。 即当两个图标靠近时&…

HTML期末学生大作业-使用HTML+CSS技术仿传智博客网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

今日财富杂志今日财富杂志社今日财富编辑部2022年第21期目录

经济纵横 资产证券化税收政策的国际比较与启示 李依莎; 1-3 中小企业知识产权保护的困境 程诗鸿; 4-6 县级政府在优化营商环境中的作用 李晓春; 7-9《今日财富》投稿&#xff1a;cnqikantg126.com 地域文化背景下论房地产经济发展的区域差异 周莹; 10-12 国…

这把联网智能门锁体验感A+

如果来一次古人与今人的谈话&#xff0c;那一定离不开的话题就是“智能设备”。智能手机、智能电脑、智能手表更新换代如此之快&#xff0c;联网智能门锁亦是如此。对于用户而言&#xff0c;使用智能设备最重要的就是“体验感”了&#xff0c;小编为大家强势推荐中科易安QY-170…

开源多波束前视声呐目标识别数据集

鉴于水下实验的高成本&#xff0c;高专业性&#xff0c;高复杂度的情况&#xff0c;开源水下数据集一直较为稀少。拥有数据的研究机构基本上也只限于自身使用。虎鲸开源计划致力于构建一个开放的实验平台&#xff0c;实验场地、硬件、软件、数据均在开源开放的范畴内。虎鲸开源…

Spring Cloud(十四):微服务灰度发布 --- Discovery

灰度发布微服务全链路灰度全链路灰度设计思路 标签路由节点打标流量染色分布式链路追踪 ThreadLocal流量治理平台 Nacos 配置中心 全链路灰度实现Discovery使用 一、父pom引入Discovery二、Gateway 引入 — 网关 discovery-plugin-strategy-starter-gateway三、微服务 引入 — …

[附源码]JAVA毕业设计论文管理系统(系统+LW)

[附源码]JAVA毕业设计论文管理系统&#xff08;系统LW&#xff09; 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a;…

Allegro如何使用快捷键快速切换层面操作指导

Allegro如何使用快捷键快速切换层面操作指导 Allegro可以用快捷键快速切换层面,比如在command下方输入数字1,可以自动打开top层 具体操作如下 打开系统属性,选择环境变量 找到home的环境变量的路径是哪里 找到路径下的pcbenv文件夹 找到env文件 用记事本打开env文件…

自学软件测试,学到什么程度可以出去找工作?

其实初级测试学的东西并不多&#xff0c;如果脱产学习的话2~3个月差不多就能简单入门。 另外不要担心&#xff0c;初级测试对于Python/Java编程&#xff0c;自动化测试&#xff0c;性能测试这些都是初步的了解和学习。如果说要深度掌握&#xff0c;那确实是还需要很多时间。 …

【pen200-lab】10.11.1.10

pen200-lab 学习笔记 【pen200-lab】10.11.1.10 🔥系列专栏:pen200-lab 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年12月5日🌴 🍭作者水平很有限,如果发现错误,还望告知,感谢! 文章目录 pen200-lab 学习笔记信息收集拓展信息收集 只开放了…