设为首页 收藏本站
查看: 1634|回复: 0

[经验分享] (Android学习笔记二)AChartEngine的使用以及在sqlite中存取DATETIME!

[复制链接]

尚未签到

发表于 2016-12-1 11:29:59 | 显示全部楼层 |阅读模式
  也是说最近买了个电子称,想写个小程序来记录下减肥的成果。输入体重,程序就自动记录并把体重随时间变化的曲线图画出来。
         DSC0000.gif
   
         首先是界面设计。如上图所示,就一个界面,内含三个Tab。这个我是照着http://www.eoeandroid.com/thread-1035-1-1.html做的。他把三个Tab的布局都写在同一个XML文件(最外层必须是FrameLayout)里,然后调用inflate方法将XML文件载入,载入之后才能使用Activity.findViewById()来获取其中的界面元素。
         第二步是找一个画曲线的工具。这里我选择了AChartEngine。上网去下载jar包和例子,看有没有横坐标是时间的timeChart。果然在demo中找到了ProjectStatusChart.java,看到它横坐标的类型是Date类型,仅仅是日期吗?还能更精确点么?运行下查看这个类型的值,发现一串挺大的数字,是从1900年最初那一刻到现在经过的纳秒,显然够精确了。
      接下来怎么把chartview加到我自己的view——第二个tab中去呢?
      从AChartEngine的demo代码中看,在列表中选中一个chart,就执行该chart对应的execute函数获得一个intent 并返回,然后通过startActivity(intent)跳转到新的页面。我想要获得新的view加到当前view中,不是跳到另一个intent去啊!仔细看execute函数,它把要画的数据填充后,返回的是return ChartFactory.getTimeChartIntent(…),幸好ChartFactory还有一个参数一样的方法getTimeChartView,返回类型是GraphicalView。这样就可以将GraphicalView绘制在想要的地方了:
    修改execute的返回类型为GraphicalView,在需要绘制图片的地方加上:


[java] view plaincopyprint?





  • myChart= new ProjectStatusChart();  
  • LinearLayout layout =(LinearLayout) findViewById(R.id.linearLayout2);  

  • GraphicalView chartView=myChart.execute(this);  

  • if(chartView!=null)  
  •    layout.addView((View)chartView, newLayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  



myChart= new ProjectStatusChart();
LinearLayout layout =(LinearLayout) findViewById(R.id.linearLayout2);
GraphicalView chartView=myChart.execute(this);
if(chartView!=null)
layout.addView((View)chartView, newLayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  画图的问题解决了,但例子中的数据都是静态的,怎样在android sqlite3数据库中存取时间、体重数据呢?经过艰苦卓绝的研究,发现SQLite采用的是弱类型的字段,任何列能存储任意类型的数据,虽说看上去只支持NULL、INTEGER、REAL、TXT还有BLOB这五种类型,实际上常见SQL类型都支持。

  来自create table语句或者强转语句的范例类型名

  产生的近似

  用于决定近似的规则

  INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8


  INTEGER

  1

  CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB


  TEXT

  2

  BLOB
no datatype specified


  NONE

  3

  REAL
DOUBLE
DOUBLE PRECISION
FLOAT


  REAL

  4

  NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME


  NUMERIC

  5

        下面详细介绍在android的sqlite中存取DATETIME类型的方法。
        创建表时:

[java] view plaincopyprint?





  • String sql="create table tb3(idINTEGER PRIMARY KEY,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, weight DOUBLE)";  



String sql="create table tb3(idINTEGER PRIMARY KEY,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, weight DOUBLE)";
  timestamp字段缺省值是当前时间(基于GMT而不是local time)。这问题导致了记录的时间跟本地实际时间有几个小时的差距,费了我好大工夫才找到解决方法: 存的时候不变,取的时候根据自己所在时区调整时间。这是sqlite中的一个函数datetime所做的工作。
       读取时的方法:

[java] view plaincopyprint?





  • Cursor cursor = db.rawQuery("selectweight,datetime(timestamp,'localtime') from tb3",null);  

  • String myDate =cursor.getString(cursor.getColumnIndex("datetime(timestamp,'localtime')"));  

  • SimpleDateFormat format = newSimpleDateFormat("yyyy-MM-dd HH:mm");  
  • Date date = format.parse(myDate);  



Cursor cursor = db.rawQuery("selectweight,datetime(timestamp,'localtime') from tb3",null);
String myDate =cursor.getString(cursor.getColumnIndex("datetime(timestamp,'localtime')"));
SimpleDateFormat format = newSimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = format.parse(myDate);
       插入数据时,由于timestamp和id能自动生成,只需插入体重数据:

[java] view plaincopyprint?





  • ContentValues values=newContentValues();   

  • double nowWeight = Double.parseDouble(weightStr);  

  • values.put("weight", nowWeight);   
  • db = sqlHelper.getWritableDatabase();  

  • db.insert("tb3", null,values);   
  • db.close();  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308190-1-1.html 上篇帖子: Android开发—数据库应用—访问数据表(SQLite OpenHelper) —查询单条记录、修改 下篇帖子: Android sqlite数据库操作通用框架AHibernate(二)源码-用于交流
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表