不说网络app,很多本地的app都有一些随机的内容推送,比如随机推送一些小知识,古诗,名言名画什么的,界面制作的好看一点就能看起来特别的文艺范,

最近就是看了这样的一些应用,就想自己实现一下,这种方法是自己想出来的,也不清楚那些app是怎么写出来的。

在这个里面我用了android支持的sqlite这种轻型的数据库,正好补充一下之前没怎么用过的知识点。

1.首先,需要一个数据库文件:

直接用数据库管理软件新建的sqlite会缺两个表,我也懒得自己添就用代码让android程序自己生成。

1 packagecom.lfk.poem;2

3 importandroid.content.Context;4 importandroid.database.sqlite.SQLiteDatabase;5 importandroid.database.sqlite.SQLiteOpenHelper;6 importandroid.widget.Toast;7

8 /**

9 * Created by Administrator on 2015/5/8.10 */

11 public class DBhelper extendsSQLiteOpenHelper {12 private static final String CREAT_DB = "create table book ("

13 + "id integer primary key autoincrement,"

14 + "poem text)";15 privateContext mcontext;16

17 public DBhelper(Context context, String name, SQLiteDatabase.CursorFactory factory, intversion) {18 super(context, name, factory, version);19 mcontext =context;20 }21

22 @Override23 public voidonCreate(SQLiteDatabase db) {24 db.execSQL(CREAT_DB);25 Toast.makeText(mcontext,"succeed++++++++++",Toast.LENGTH_SHORT).show();26 }27

28 @Override29 public void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) {30 }31 }

首先重写一个dbhelper类extends SQLiteOpenHelper 类里面设置一个静态字符串,存入的字符串是定义新表的内容,第一个是id设置为顺序自增,第二个就是古诗了,设置为文本形式,

db.execSQL(CREAT_DB);用该语句在OnCreate里面进行生成*.db文件,然后发出一条提示succeed++++++++。

然后在主界面加个Button,在OnClick里面运行dbhelper.getWritableDatabase();就能创建/打开一个数据库。

2.为数据库添加内容:

现在我们拿到的是一个空的数据库,不能使用,我们也不想一条一条的手动输入内容,所以我们要把数据库拿出来。

在手机(或者模拟器里装个RE文件管理器)在data/data//database/里就能找到你的数据库。

就象这样,然后把它拷到电脑里。

在电脑上安装Navicat for SQLite,打开你拿出来的.db文件:

里面的book就是我们刚才用代码新建的一个表文件,接着我们要准备好你要输入的内容。

id =poem001=张九龄:感遇四首之一 孤鸿海上来,池潢不敢顾。侧见双翠鸟,巢在三珠树。矫矫珍木巅,得无金丸惧。美服患人指,高明逼神恶。今我游冥冥,弋者何所慕。002=张九龄:感遇四首之二 兰叶春葳蕤,桂华秋皎洁。欣欣此生意,自尔为佳节。谁知林栖者,闻风坐相悦。草木有本心,何求美人折?003=张九龄:感遇四首之三 幽人归独卧,滞虑洗孤清。持此谢高鸟,因之传远情。日夕怀空意,人谁感至精?飞沈理自隔,何所慰吾诚?004=张九龄:感遇四首之四 江南有丹橘,经冬犹绿林。岂伊地气暖,自有岁寒心。可以荐嘉客,奈何阻重深!运命惟所遇,循环不可寻。徒言树桃李,此木岂无阴?005=李白:下终南山过斛斯山人宿置酒 暮从碧山下,山月随人归,却顾所来径,苍苍横翠微。相携及田家,童稚开荆扉。绿竹入幽径,青萝拂行衣。欢言得所憩,美酒聊共挥。长歌吟松风,曲尽河星稀。我醉君复乐,陶然共忘机。

比如我写成了这样的固定格式,并写了他们的栏位名称(上正则表达式啊!)

然后右键book表选择倒入向导,在第三步设置分隔符为=

成功的话我们就会发现栏位都设定好了,这样我们就能成功导入了

再看我们的book表里面就有了数据了,这样我们就可以正常使用了:

好了,我们保存一下,放在我们工程的res下的raw文件夹。

3.修改主函数完成功能:

1 packagecom.lfk.poem;2

3 importandroid.content.Context;4 importandroid.database.Cursor;5 importandroid.database.sqlite.SQLiteDatabase;6 importandroid.os.Bundle;7 importandroid.os.Environment;8 importandroid.support.v7.app.ActionBarActivity;9 importandroid.util.Log;10 importandroid.view.View;11 importandroid.widget.Button;12 importandroid.widget.TextView;13

14 importjava.io.File;15 importjava.io.FileNotFoundException;16 importjava.io.FileOutputStream;17 importjava.io.IOException;18 importjava.io.InputStream;19

20

21 public class MainActivity extendsActionBarActivity {22 private final int BUFFER_SIZE = 400000;23 public static final String DB_NAME = "poem.db"; //保存的数据库文件名

24 public static final String PACKAGE_NAME = "com.lfk.poem";//应用的包名

25 public static final String DB_PATH = "/data"

26 + Environment.getDataDirectory().getAbsolutePath() +"/"                  //这里定义了一些参数,有文件的尺寸,包名,数据库名,存放数据库的位置等

27 + PACKAGE_NAME+ "/databases"; //在手机里存放数据库的位置

28 privateContext mcontext;29@Override30 protected voidonCreate(Bundle savedInstanceState) {31 super.onCreate(savedInstanceState);32setContentView(R.layout.activity_main);33 //dBhelper = new DBhelper(this,"poem.db",null,1);

34 SQLiteDatabase database =openDatabase();35 Cursor cursor = database.query("book", null, null,null,null,null,null);          //这部分是我想把所有东西打印到日志里看看,可以删掉

36 if(cursor.moveToFirst()) {37 do{38 String id = cursor.getString(cursor.getColumnIndex("id"));39 String poem = cursor.getString(cursor.getColumnIndex("poem"));40 Log.e("id="+id,"poem="+poem);41 }while(cursor.moveToNext());42}43cursor.close();44database.close();45 Button button =(Button)findViewById(R.id.create_it);46 button.setOnClickListener(newView.OnClickListener() {47@Override48 public voidonClick(View v) {49 int ll = (int)(1+Math.random()*(5));50 SQLiteDatabase database =openDatabase();51 Cursor cursor = database.rawQuery("Select * From book Where id = "+ll, null);  //把Button的改了一下,设置了一个随机数1-5,打开数据库,然后用了sql的语句从book中找

52 cursor.moveToFirst();                                  //并且id=随机量然后取出第一位数据,0位是id把它设置进一个textview里面

53 String poem = cursor.getString(1);54 Log.e(poem,"================");55 TextView textView =(TextView)findViewById(R.id.text_view);56textView.setText(poem);57cursor.close();

database.close();58}59});60}61 publicSQLiteDatabase openDatabase() {62 try{63 File myDataPath = newFile(DB_PATH);64 if (!myDataPath.exists())65{66 myDataPath.mkdirs();//如果没有这个目录,则创建

67}68 String dbfile = myDataPath+"/"+DB_NAME;69 if (!(new File(dbfile).exists())) {//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库  //这段函数是用来打开数据库的,如果没有数据库,就会从raw文件夹复制到本地的文件夹

70InputStream is;71 is = this.getResources().openRawResource(R.raw.poem); //欲导入的数据库

72 FileOutputStream fos = newFileOutputStream(dbfile);73 byte[] buffer = new byte[BUFFER_SIZE];74 int count = 0;75 while ((count = is.read(buffer)) > 0) {76 fos.write(buffer, 0, count);77}78fos.close();79is.close();80}81 SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);82 Log.e("=======================","get it ======================");83 returndb;84 } catch(FileNotFoundException e) {85 Log.e("Database", "File not found");86e.printStackTrace();87 } catch(IOException e) {88 Log.e("Database", "IO exception");89e.printStackTrace();90}91 return null;92}93 }

这样我们就能把从数据库里面取到的数据显示在界面上了,到此为止,初步功能就完事了

可能还会有一篇博文,接下来就是要做一些界面的修改,毕竟现在这个画面还是太丑啦!

喜欢的请点赞,=_=!

原文:http://www.cnblogs.com/lfk-dsk/p/4492974.html

android sqlite 随机,Android+Sqlite 实现内容的随机内容推送(一)相关推荐

  1. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

    Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...

  2. android自定义push通知_20个海外Web和App推送通知服务工具

    在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处.推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站.它们可以帮助你以指数方式增加流量和参与率.因此,营销人 ...

  3. 牛轧糖Android 7.1系统,小米5C吃上“牛轧糖”推送安卓7.1:系统更流畅,联通信号更稳定!...

    描述 不久前MIUI让小米5和小米Max两款机型已经吃上了Android7.0牛轧糖版本,与此同时小米5C作为搭载自主处理器的一款手机,待遇也相当不错.昨天晚上为内测用户推送了基于Android 7. ...

  4. Android中脱离WebView使用WebSocket实现群聊和推送功能

    WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...

  5. 极光推送android 区分开发测试,给自己的项目做极光推送的步骤

    极光推送(对客户端的app如天猫进行消息推送) 第一种:利用网页进行推送(下面按这种来介绍) 第二种:利用javase代码进行消息推送 使用步骤 1\登陆极光网址 2\注册后并登陆 3.点击用户名下的 ...

  6. Android Cloud to Device Messaging 服务介绍 – 如何使用云计算推送消息到手机(转载)...

    基 于 Android 的手机是面向移动互联网的手机,保持24小时在线才能充分发挥它的全部能量.而 Google 也在不断提供各式各样的网络服务来吸引用户,有的服务是直接面向终端用户,而有的服务是面向 ...

  7. 三星Android Pie软件,三星开始向欧洲Galaxy S9用户推送Android Pie稳定版更新包

    在经过近两个月的测试后,三星终于开始向欧洲市场推送 Galaxy S9 / S9+ 的 Android 9.0 Pie 稳定版更新包.上个月,随着 Android Pie 公众测试的开启,这家韩国科技 ...

  8. 老款诺基亚6 android 8,行动迅速!诺基亚为Nokia 6/7推送安卓8.0

    [中关村在线新闻资讯]1月15日消息,诺基亚手机官方微博消息,全新诺基亚6/7这两款手机已经正式推送Android 8.0系统更新,相比较友商而言,诺基亚行动可谓是迅速. 诺基亚为Nokia 6/7推 ...

  9. Ionic3 Cordova Android 6.x集成最新极光华为/小米厂商通道推送

    Ionic3 Cordova Android 6.x集成最新极光华为/小米厂商推送 前置 一.集成华为厂商推送 1.在开放平台创建并配置应用 2.在安卓项目配置SDK 2.1. 添加配置文件 2.2. ...

  10. note3+5.0+Android软件正在升级,波兰先行!三星为Note4推送Android 5.0升级

    虽然三星新一代旗舰机型Galaxy Note 4运行Android 5.0 Lollipop的照片早在去年11月就已被曝光,不过或许是由于需要适配Gear VR虚拟现实头戴式设备,Galaxy Not ...

最新文章

  1. 神爱程序员,于是带来Python
  2. 2019~2020年IDC行业发展趋势预测
  3. windows下怎么安装protobuf for python
  4. Hadoop技术之Hadoop HA 机制学习
  5. 牛客网暑期ACM多校训练营(第一场)J Different Integers
  6. mysql数据库通过二进制 -【恢复数据记录】
  7. 什么是节点光端机?总线型光端机有哪些优势?
  8. RN学习笔记01:概述、特点与环境搭建
  9. 实验3-4 统计字符 (15 分)
  10. timequest静态时序分析学习笔记之命令约束
  11. 基于jQuery8款超赞的评分插件
  12. 7月新的开始 - Axure学习05 - 元件库的创建
  13. 中国省市区json数据 三级联动
  14. 副高相当于副处吗_事单副高职称相当于副处待遇?别逗了,连公务员副科实职都不如...
  15. 有卡却显示无服务器,为什么卡一直显示无服务
  16. html代码打猎小游戏,html贪吃蛇小游戏课件-附源代码
  17. 前端框架学习-layui
  18. 爬虫:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position
  19. 第一代程序员作家--王小波
  20. python程序应用经典实例-Python实例应用经典讲解

热门文章

  1. 论坛贴吧图片IP签名档源码
  2. CSS系列之外边距 margin
  3. Windows 找不到休眠怎么办?
  4. 图像处理之阈值分割[全局阈值、Otsu阈值和迭代式阈值分割]
  5. 前端花瓣飘落特效代码
  6. 计算机显卡驱动全部卸载,Win7彻底卸载NVIDIA显卡驱动程序的办法
  7. 指南:清晰理解zkEVM、EVM 兼容性和Rollup
  8. Python获取计算机CPU核数
  9. 苹果笔记本摄像头黑屏怎么回事
  10. SpringBoot实现发送电子邮件