【记账小助手】项目文档(包含需要用到的知识点)

通过分析需求,得到以下entity :
         
1) 人         UUID   name(姓名)  
2) 账本     UUID   name(账本名称)  birthday (账本创建时间)   amount(账本包含的消费数目) totalize(账本总计)
3) 类别     UUID   name(名称)   subType(子类别)

4) 消费    UUID   account从属账本  type从属类别  monetary消费金额  calendar消费日期   spendingWay计算方式  payer消费人  comment备注

涉及到的知识:

SQLiteopenHelper    Application

关于assets 与 raw 文件夹的区别

android开发中可以使用res/raw和assets文件夹来存放不需要系 统编译成二进制的文件,例如字体文件等,这两个文件夹有很多相同的地方,例如都可以把文件夹下的东西原封不动的拷贝到应用程序目录下,但是两个文件夹也有一些不同的地方,首先就是访问方式不同,res/raw文件夹不能有子文件夹,文件夹下的资源可以使用getResources().openRawResource(R.raw.id)的方式获取到,而assets文件夹可以自己创建文件夹,并且文件夹下的东西不会被R.java文件索引到,必须使用AssetsManager类进行访问。

另外,一些低版本的android系统对res/raw和assets文件夹资源大小有限制(<1M,其实res/raw和assets文件夹下的文件在android系统底层处理机制是一样的)

 

 

为了能够让数据库更易扩展,灵活,该项目中的数据库是放在assets或者res/raw文件夹下的。(当然放到Sdcard下也没有问题)。在Application启动时检查,在data/data/项目/databases文件夹下是否有AccAssDB.db 文件。有的话就直接启动项目,没有的话就加载数据库。(注意是异步加载,涉及到io操作)

 

涉及到的知识、

 AsyncTask

Android提供了几种在其他线程中访问UI线程的方法。

  java代码:
  Activity.runOnUiThread( Runnable )
  View.post( Runnable )
  View.postDelayed( Runnable, long )

  Hanlder
  这些类或方法同样会使你的代码很复杂很难理解。然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕。

  为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。不需要借助线程和Handler即可实现。

  AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。
  Params 启动任务执行的输入参数,比如HTTP请求的URL。
  Progress 后台任务执行的百分比。
  Result 后台执行任务最终返回的结果,比如String。

  AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。

  1) 子类化AsyncTask
  2) 实现AsyncTask中定义的下面一个或几个方法

  onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。

   doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用publishProgress方法来更新实时的任 务进度。该方法是抽象方法,子类必须实现。

  onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。

  onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread。

  为了正确的使用AsyncTask类,以下是几条必须遵守的准则:

  1) Task的实例必须在UI thread中创建
  2) execute方法必须在UI thread中调用
  3) 不要手动的调用onPreExecute(),onPostExecute(Result),doInBackground(Params...),onProgressUpdate(Progress...)这几个方法
  4) 该task只能被执行一次,否则多次调用时将会出现异常

 

将一些初始化数据库的文字都放到res/value/strings.xml文件里面,涉及到知识为内容的读取

 在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js,css等文件。在后面会介绍如何读取assets文件夹的资源!

    res文件夹里面的多个文件夹的各自介绍(来自网上的Android开发指南中文版内容):

目录Directory

资源类型Resource Types

res/anim/

XML文件,它们被编译进逐帧动画(frameby frame animation)或补间动画(tweenedanimation)对象

res/drawable/

.png、.9.png、.jpg文件,它们被编译进以下的Drawable资源子类型中:

要获得这种类型的一个资源,可以使用Resource.getDrawable(id)

位图文件

9-patches(可变尺寸的位图)

为了获取资源类型,使用mContext.getResources().getDrawable(R.drawable.imageId)

注意:放在这里的图像资源可能会被aapt工 具自动地进行无损压缩优化。比如,一个真彩色但并不需要256色的PNG可能会被转换为一个带调色板的8位PNG。这使得同等质量的图片占用更少的资源。 所以我们得意识到这些放在该目录下的二进制图像在生成时可能会发生变化。如果你想读取一个图像位流并转换成一个位图(bitmap),请把图像文件放在 res/raw/目录下,这样可以避免被自动优化。

res/layout/

被编译为屏幕布局(或屏幕的一部分)的XML文件。参见布局声明(DeclaringLayout)

res/values/

可以被编译成很多种类型的资源的XML文件。

注意:不像其他的res/文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。XML元素类型控制这些资源应该放在R类的什么地方。

尽管这个文件夹里的文件可以任意命名,不过下面使一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中):

     array.xml 定义数组

    colors.xml 定义colordrawable和颜色的字符串值(colorstringvalues)。使用Resource.getDrawable()和Resources.getColor()分别获得这些资源。

    dimens.xml定义尺寸值(dimensionvalue)。使用Resources.getDimension()获得这些资源。

     strings.xml定义字符串(string)值。使用Resources.getString()或者Resources.getText()获取这些资源。getText()会保留在UI字符串上应用的丰富的文本样式。

     styles.xml 定义样式(style)对象。

res/xml/

任意的XML文件,在运行时可以通过调用Resources.getXML()读取。

res/raw/

直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID,即R.raw.somefilename

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值