Android Day02-文件操作-登陆示例

简介:

需求:登陆


第1步:搭建UI

    采用混合布局,布局搭建好之后如下所示:

    wKiom1WlmUzR-unaAAAsLtDs4aE743.jpg

第2步:准备工作

    根据javaWeb中的mvc+dao的开发模式,创建好包名和类。

    wKiom1Wlmc6R2f9tAAEAJcRn8h4079.jpg

第3步:业务逻辑

    就是一个存值和取值的过程,也可以说是读写文件的过程。

    注意在获取路径的时候,不要使用硬性编码(hardcode)。



关键知识点梳理:

   wKioL1WmVuSC247uAABHo4OiT-M206.jpg 

    ▇获取应用程序的files私有目录:"/data/data/应用程序包名/files"

         方式1:得路径,再得到流。

            File context.getFilesDir()

     <--  补充一下 File context.getCacheDir()    表示得到缓存目录/caches-->

        方式2:直接得到流

           文件读取流:InputStream in = context.openFileInput("文件名(带后缀)");        

           文件写入流:OutputStream out  = context.openFileOutput("user.txt",                                    Context.MODE_PRIVATE);//有2个参数,第2个参数

                        表示文件的权限。

        

            

    ▇获取设备的SD卡目录:

        →1.注意要配置sd的访问权限。

            wKioL1WlnT_DWSpOAAFgGUFDHpE199.jpg

        →2.判断sd卡的状态。    

            

1
2
3
4
5
6
7
String storageState = Environment.getExternalStorageState();
if (!storageState.equals(Environment.MEDIA_MOUNTED))
{
     //如果挂起,提示用户sd卡不存在。
     Toast.makeText(mainContext,  "sd卡不存在" , Toast.LENGTH_SHORT).show();
     return ;
}

        →3.判断sd卡空间容量信息。

        

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//假如SD卡小于200M就提示内存不足
//首先获取外部存储的目录 File对象
     File file_storage = Environment.getExternalStorageDirectory();
//通过File对象来获得外部存储的可用空间
     Long useable_storage = file_storage.getUsableSpace();
     //将字节转换成易于阅读的M表示方法
         String useable_storage_mstr = Formatter.formatFileSize(mainContext,useable_storage);
                         
//得到外部存储的总空间
     Long total_storage = file_storage.getTotalSpace();
     String total_storage_mstr = Formatter.formatFileSize(mainContext, total_storage);
         if (useable_storage <  1024 * 1024 * 200 )
     {
         Toast.makeText(mainContext,  "外部存储空间不足,剩余可用空间为:"
                     + useable_storage_mstr + "M"  
                     ",总空间为:"  + total_storage_mstr +  "M"
                     , Toast.LENGTH_LONG).show();
         return ;
     }

        通过linux命令df /sdcard来获得外部设备外部存储的信息:

        wKioL1WloCSAREGpAAA_AOsx_-w584.jpg

     ▇获取资产文件夹Asset目录下的文件输入流:

        

1
2
3
4
5
6
//获取上下文的所有资源对象
Resources res = context.getResources();
//从资源对象中获取资产目录Asset的管理器AssetManager
AssetManager manager = res.getAssets();
//利用管理器的open方法获取它的目录下指定文件的读取流
InputStream in = manager.open( "user.txt" );

     ▇Preferences:"/data/data/应用程序包名/shared_prefs"

       用于存放一些简单的标记信息、设置信息。通过xml文件在实现保存和取出。

         

       Preferences存储文件流程

1
2
3
4
5
6
7
8
9
//第1步:通过上下文对象得到SharedPreferences对象
         SharedPreferences user_pref =  context.getSharedPreferences( "user.txt" , Context.MODE_PRIVATE);
//第2步:得到SharedPreferences的Editor对象
     Editor user_editor = user_pref.edit();
//第3步:通过Editor向SharedPreferences对象里面设置值,类似map中的键和值 。
     user_editor.putString( "username" , user.getUsername()); 
     user_editor.putString( "password" , user.getPassword());
//第4步:提交Editor
     return  user_editor.commit();

      Preferences读取文件内容

1
2
3
4
5
6
//第1步:通过上下文对象得到SharedPreferences对象
         SharedPreferences user_share = context.getSharedPreferences( "user.txt" , Context.MODE_PRIVATE);
//第2步:得到share对象的数据
     String username = user_share.getString( "username" "用户名找不到" );
     String password = user_share.getString( "password" "密码找不到" ); 
     //上面getString方法的第二个参数为找不到指定键名的时候返回的缺省值。

    

    通过总结可以发现,上面的这些文件读取流,都只能读取当前应用程序的私有目录下的文件流,有局限性。如果要想跨应用读取数据,还是得结合一般IO流。


    今天还讲了XML的解析和序列化,和javaWeb中的xml的解析及序列化十分的相似,只是获取解析器和序列器的方式稍有不同,是通过Xml这个类直接获取的。



Android 开发时如何正确获取使用扩展存储路径

    http://http://my.oschina.net/liucundong/blog/314520

    

    作为一个程序员,想必你也很讨厌App在SD卡根目录乱建目录吧,那就从我做起,来遵守Google的这一规定吧。

    通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/{package_name}/files/ ,储存一些长时间保存的数据;

    通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/{package_name}/cache/,储存临时缓存数据;

    这两个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项。



      本文转自屠夫章哥  51CTO博客,原文链接:http://blog.51cto.com/4259297/1674699,如需转载请自行联系原作者






相关文章
|
8天前
|
存储 开发工具 Android开发
探索安卓开发:从新手到专家的旅程
【8月更文挑战第24天】在这个数字时代,安卓开发不仅仅是一个技能,它更像是一扇打开无限可能世界的大门。无论你是编程新手还是资深开发者,掌握安卓开发的精髓都能为你带来意想不到的机遇和挑战。本文将通过浅显易懂的语言和实际代码示例,引导你了解安卓开发的基础知识,探索其深层次的技术和应用,并激发你对这一领域的思考和热情。让我们一起踏上这段充满创新和发现的旅程吧!
|
2天前
|
测试技术 Linux Android开发
探索安卓开发之旅:从初学者到专家
【8月更文挑战第29天】本文是一篇为初学者和有一定经验的开发者准备的安卓开发指南。我们将从基础概念开始,逐步深入到高级主题,如自定义视图、性能优化等。无论你是刚刚入门,还是希望提升自己的技能,这篇文章都将为你提供有价值的信息和建议。让我们一起踏上这段激动人心的旅程吧!
|
1天前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
2天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
1天前
|
XML 搜索推荐 Android开发
安卓开发中的自定义View组件实践
【8月更文挑战第30天】探索Android世界,自定义View是提升应用界面的关键。本文以简洁的语言带你了解如何创建自定义View,从基础到高级技巧,一步步打造个性化的UI组件。
|
2天前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
|
2天前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。
|
6天前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
|
7天前
|
IDE Java 开发工具
探索安卓开发之旅:打造你的第一款App
【8月更文挑战第24天】在这篇文章中,我们将一起踏上激动人心的安卓开发之旅。不论你是编程新手还是希望扩展技能的老手,本文将为你提供一份详尽指南,帮助你理解安卓开发的基础知识并实现你的第一个应用程序。从搭建开发环境到编写“Hello World”,每一步都将用浅显易懂的语言进行解释。那么,让我们开始吧!
|
1天前
|
JSON 缓存 搜索推荐
探索安卓开发:打造个性化天气应用探索移动应用开发之旅:从基础到高级
【8月更文挑战第30天】在数字化时代,智能手机已成为我们日常生活中不可或缺的一部分。安卓系统以其开放性和灵活性赢得了全球用户的青睐。本文将引导你了解如何利用安卓开发技术,从零开始构建一个具有个性化特色的天气应用。我们将一起深入探讨应用的设计思路、核心功能实现以及用户交互体验的优化方法。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的指导和灵感。