《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.2节简单数据的存储——Preferences

简介:

本节书摘来自异步社区《Android 3D游戏开发技术宝典——OpenGL ES 2.0》一书中的第2章,第2.2节简单数据的存储——Preferences,作者 吴亚峰,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 简单数据的存储——Preferences
Android 3D游戏开发技术宝典——OpenGL ES 2.0
进行游戏开发时,有时需要持久地存储一些十分简单的数据,例如,游戏中音效的开关状态、振动效果的开关状态等。Android设计者也充分注意到了这种存储简单数据的需求,提供了一个Preferences类专门用于完成此类任务。

2.2.1 Preferences简介
Preferences使用非常方便,但功能也不是很强大,一般适合用来保存一些用户设置的参数,是一种轻量级的数据存储机制。Preferences仅可以用来存储几种简单类型的数据,如:boolean、int、float、long或者String。这些数据以键值对的形式存储在应用程序私有的Preferences目录(/data/data/应用程序包名/shared_prefs/)下的特定xml文件中,如图2-7所示。


4d6f0f1e395ed3516ec6aba4b7458aa39cae959d

提示 请读者注意,这个xml文件是设计为由程序自动维护的,不应该手动人工进行修改,以免影响程序的正确运行。

2.2.2 Preferences实现访问时间的记录
本小节将介绍一个使用Preferences实现的,具有记录上次访问时间功能的小案例。其具体功能为:第一次运行本案例中的程序,程序将显示“用户您好,欢迎您第一次光临本软件。”,若不是第一次运行,则显示上一次用户运行的时间,如“用户您好,您上次进入时间为:Oct 15,2011 2:38:40 AM”。程序运行的效果如图2-8、图2-9所示。

介绍完本案例的运行效果之后,接下来将对本案例的开发进行介绍。主要是本案例的主控制类Sample2_3_Activity的开发,其代码如下。

1 package com/bn/pp3;
2 import java.util.Date;       //引入相关包
3 public class Sample2_3_Activity extends Activity {   //创建Activity
4     @Override
5     public void onCreate(Bundle savedInstanceState) { //重写onCreate方法
6         super.onCreate(savedInstanceState);
7         setContentView(R.layout.main);    //跳转到主界面


1f556bb8629a36722409796929813f292b0cdcce
8         //获取SharedPreferences引用,存储名称为bn.xml,读写模式为私有
9         SharedPreferences sp=this.getSharedPreferences("bn", Context.MODE_PRIVATE);        
10         String lastLoginTime=sp.getString("time", null); //获取键为“time”的值       
11         if(lastLoginTime==null) {    //若值为空,则为第一次运行本案例
12            lastLoginTime="用户您好,欢迎您第一次光临本案例。";    }
13         else{         //不为空,则修改字符串为上次运行时间
14             lastLoginTime="用户您好,您上次进入时间为:"+lastLoginTime;    }        
15         SharedPreferences.Editor editor=sp.edit(); //取得编辑对象,来修改Preferences文件
16         editor.putString("time", new Date().toLocaleString());
             //修改键为“time”的值为当前时间
17         editor.commit();      //提交修改        
18         TextView tv=(TextView)this.findViewById(R.id.TextView01); //获取用来显示的  
                  //TextView
19         tv.setText(lastLoginTime);    //设置显示的字符串
20 }}

第9行使用getPreferences()方法来获得Preferences对象,并将存储文件命名为bn.xml,同时规定读写模式为私有。
第10-14行功能为在打开程序时,获取Preferences中存储的键为“time”的值,并判断是否为空来确定是否为第一次运行本案例,来显示不同的信息。
第15-17行功能为首先获取Preferences的编辑对象,然后对Preferences文件进行修改,设置键为“time”的值为当前的时间,最后提交。
第18-19行功能为设置界面中显示的字符串内容。

相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1649 4
|
12月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
699 11
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
472 1
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
3016 2
|
传感器 存储 Java
Android 3D效果的实现
本文详细讲解了如何在Android中实现3D效果,基于官方Demo并结合实际需求进行调整。通过传感器(Sensor)获取设备旋转数据,利用OpenGL ES绘制3D立方体,实现了动态旋转的视觉效果。文章分为需求分析、效果展示、实现步骤及源码解析,涵盖传感器注册与注销、OpenGL核心方法使用等内容,适合初学者学习参考。文末附完整代码,便于实践操作。
451 0
Android 3D效果的实现
|
XML 存储 JSON
51. 【Android教程】JSON 数据解析
51. 【Android教程】JSON 数据解析
572 2
|
存储 API 文件存储
47. 【Android教程】SharedPreferences 存储
47. 【Android教程】SharedPreferences 存储
359 2
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1026 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
传感器 Android开发 开发者
Android自定义view之3D正方体
本文介绍了如何通过手势滑动操作实现3D正方体的旋转效果,基于Android自定义View中的GLSurfaceView。相较于使用传感器控制,本文改用事件分发机制(onTouchEvent)处理用户手势输入,调整3D正方体的角度。代码中详细展示了TouchSurfaceView的实现,包括触控逻辑、OpenGL ES绘制3D正方体的核心过程,以及生命周期管理。适合对Android 3D图形开发感兴趣的开发者学习参考。
281 0
|
存储 安全 API
Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
本文介绍了 Android 开发中常用的键值对存储方案,包括 SharedPreferences、MMKV 和 DataStore,并对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
1359 1

热门文章

最新文章