安卓实验安卓SQLite和SQLiteDataBase的应用

1、 先将数据写入两个news对象中,方便一会插入数据库,这里定义了一个SetNews类,里面静态方法是插入两条数据到news对象中并返回插入之后的对象

2、重写SQLiteOpenHelper类,以使第一次加载时能创建数据库及表。这里定义了一个MySQLiteHelper类,通过父类的构造方法创建数据库,版本为1;然后重写onCreate方法创建表。

2、 在ListActivity加载时,向数据库中插入两条数据。
(1)首先定义insert方法,方便以后插入数据。

(2)插入数据

3、 插入数据之后读取数据
(1)首先定义一个读取数据库数据的方法

(2)调用方法

4、 将查询到的数据显示到ListView列表中
(1)首先在实验四基础上定义一个ListView,定义id属性

(2)自定义一个布局文件,用于listView加载布局文件,布局如下图

(3)定义一个Map集合,将查出来的数据依次装进map集合

(4)定义适配器并setAdapter

5、 现在就已经可以显示数据库中查询的数据在列表中了
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030192316450.png#pic_cente

6、 设置点击事件,三秒过后颜色变蓝色
(1)获取当前点击列表位置,赋值给num

(2)当返回列表界面的时候,如果时间超过3秒,就将当前列表的位置写进XML文件中,首先定义将num写入文件的方法

(3)定义改变颜色的方法,此时需要将写入文件的num读出来,然后通过ListView中的getChildAt方法获取点击过的列表,然后将列表变色,这里用到处理字符串的一些方法

(4)在返回列表界面的时候会调用onRestart方法

运行截图:
前面的两个带图片的是我之前创建的两个列表,具体的列表实现是下面没有图片的![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030192357559.png#pic_center![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030192405172.png#pic_center![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030192411829.png#pic_center
代码:
ListActivity代码:

package com.example.Work6;import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ListActivity extends AppCompatActivity {//定义初始时间public static long time1;//定义结束时间public static long time2;//定义标志(flag),用于区分是点击的哪个标题private String flag;String num;TextView text11 = null;TextView text21 = null;static String t1;static String t2;static String t3;static String t4;//用于存储点击过的列表(list)编号final static List<String> listnum = new ArrayList<String>();List<Map<String, Object>> listitems = new ArrayList<Map<String, Object>>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);setContentView(R.layout.activity_list);text11 = (TextView) findViewById(R.id.Text1);TextView text12 = (TextView) findViewById(R.id.TextView2);TextView text13 = (TextView) findViewById(R.id.TextView3);text21 = (TextView) findViewById(R.id.TextView21);TextView text22 = (TextView) findViewById(R.id.TextView22);TextView text23 = (TextView) findViewById(R.id.TextView23);//定义一个对象数组,长度为2final News[] news0 = new News[2];News[] news = new News[2];//对象初始化news0[0] = new News();//通过SetNews类向news[0]和news[1]赋值news[0] = SetNews.setNews(news0[0], 0);news0[1] = new News();news[1] = SetNews.setNews(news0[1], 1);//初始化数据库,插入数据this.insert(news[0].getTitle(), news[0].getSource(), news[0].getTime(), news[0].getContent());this.insert(news[1].getTitle(), news[1].getSource(), news[1].getTime(), news[1].getContent());//读取数据库文件final List<News> list = query(); //查询出数据库的数据,并将返回值赋值给list集合//在ListActivity加载时候给各个TextView赋值text11.setText(list.get(0).getTitle());text12.setText(list.get(0).getSource());text13.setText(list.get(0).getTime());text21.setText(list.get(1).getTitle());text22.setText(list.get(1).getSource());text23.setText(list.get(1).getTime());ListView listview = (ListView) findViewById(R.id.list); //通过id找到ListView//创建map集合init(list);//创建适配器SimpleAdapter adapter = new SimpleAdapter(this, listitems, R.layout.layout, new String[]{"标题", "来源", "时间"}, new int[]{R.id.TextView1, R.id.TextView2, R.id.TextView3});//设置适配器listview.setAdapter(adapter);listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {num = String.valueOf(position); //获取当前点击的列表位置编号time1 = System.currentTimeMillis(); //获取当前系统时间Intent intent = new Intent(ListActivity.this, DetailActivity.class);intent.putExtra("News", list.get(position)); //向详情界面传送数据startActivity(intent); //开启详情界面}});text11.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//获取系统当前时间赋值给time1//time1 = System.currentTimeMillis();//修改flag值flag = "n1";t1 = list.get(0).getTitle();t2 = list.get(0).getSource();t3 = list.get(0).getTime();t4 = list.get(0).getContent();Configuration mConfiguration = ListActivity.this.getResources().getConfiguration();int ori = mConfiguration.orientation;if (ori == mConfiguration.ORIENTATION_LANDSCAPE) {Toast.makeText(ListActivity.this, "现在是横屏", Toast.LENGTH_LONG).show();FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();Fragment fragment = new DetailFragment();fragmentTransaction.commit();fragmentTransaction.replace(R.id.fragment, fragment);} else if (ori == mConfiguration.ORIENTATION_PORTRAIT) {//初始化IntentIntent intent = new Intent(ListActivity.this, DetailActivity.class);//携带参数(一个对象)传入DetailActivityintent.putExtra("News", list.get(0));//打开指定ActivitystartActivity(intent);}}});text21.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {t1 = list.get(1).getTitle();t2 = list.get(1).getSource();t3 = list.get(1).getTime();t4 = list.get(1).getContent();//原理同上time1 = System.currentTimeMillis();flag = "n2";Configuration mConfiguration = ListActivity.this.getResources().getConfiguration();int ori = mConfiguration.orientation;if (ori == mConfiguration.ORIENTATION_LANDSCAPE) {Toast.makeText(ListActivity.this, "现在是横屏", Toast.LENGTH_LONG).show();FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();Fragment fragment = new DetailFragment();fragmentTransaction.commit();fragmentTransaction.replace(R.id.fragment, fragment);} else if (ori == mConfiguration.ORIENTATION_PORTRAIT) {//初始化IntentIntent intent = new Intent(ListActivity.this, DetailActivity.class);//携带参数(一个对象)传入DetailActivityintent.putExtra("News", list.get(1));//打开指定ActivitystartActivity(intent);}}});}public void insert(String Title, String Source, String Time, String Content) {Log.d("插入数据库", "插入成功");MySQLiteHelper myHelper = new MySQLiteHelper(ListActivity.this);SQLiteDatabase db1 = myHelper.getWritableDatabase();//获得数据库写的权限ContentValues values = new ContentValues(); //创建ContentValues对象values.put("Title", Title); //向ContentValues对象中添加键值对,其中键对应数据库中的列名values.put("Source", Source);values.put("Time", Time);values.put("Content", Content);db1.insert("NewsTable", null, values);//调用SQLiteDatabase对象的insert方法插入数据}public List<News> query() {MySQLiteHelper mySQLiteHelper = new MySQLiteHelper(ListActivity.this);SQLiteDatabase db = mySQLiteHelper.getReadableDatabase();//获取游标,游标移动代表下一行数据Cursor cursor = db.query("NewsTable", null, null, null, null, null, null);List<News> list = new ArrayList<>();if (cursor != null) {for (int i = 0; i < cursor.getCount(); i++) {//游标移动到下一行while (cursor.moveToNext()) {//获得数据,并调用News类的构造方法创建news1对象News news1 = new News(cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4));list.add(news1);  //将news1对象添加到News的list集合中}}}db.close();return list; //返回list集合}private void init(List<News> list) {for (int i = 0; i < list.size(); i++) {Map<String, Object> map = new HashMap<String, Object>();map.put("标题", list.get(i).getTitle());map.put("来源", list.get(i).getSource());map.put("时间", list.get(i).getTime());listitems.add(map);}}@Overrideprotected void onRestart() {super.onRestart();//获取系统当前时间time2 = System.currentTimeMillis();//调用函数,若达到规定浏览时间,则将该新闻的position序号添加进浏览新闻的listnum中,然后存进XML文件中getAlRead();//判断列表是否被浏览,如果被浏览,将颜色变为蓝色changColor();}private void getAlRead() {//达到规定阅读时间,则将新闻ID存入文件if ((time2 - time1) / 1000 > 3) {SharedPreferences.Editor editor = getSharedPreferences("AlRead", MODE_PRIVATE).edit();listnum.add(num);//将已读新闻ID转化为字符串保存String str = "";for (int i = 0; i < listnum.size(); i++) {str += listnum.get(i) + ",";}editor.putString("listnum", str);editor.apply();}}public void changColor() {//如果文件存在,则将文件中的列表序号所在列表变为蓝色File xml = new File("data/data/com.example.Work6/shared_prefs", "AlRead.xml");if (xml.exists()) {SharedPreferences sharedPreferences = getSharedPreferences("AlRead", MODE_PRIVATE);String str = sharedPreferences.getString("listnum", "");String[] split = str.split(",");for (int i = 0; i < split.length; i++) {//获得子item的layoutListView listview = (ListView) findViewById(R.id.list);LinearLayout layout = (LinearLayout) listview.getChildAt(Integer.parseInt(split[i]));TextView textRead = (TextView) layout.findViewById(R.id.TextView1);textRead.setTextColor(Color.BLUE);}}}}

MySQLiteHelper代码

package com.example.Work6;import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;public class MySQLiteHelper extends SQLiteOpenHelper {public MySQLiteHelper(Context context) {super(context, "demo.db", null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {Log.d("执行数据库操作","创建数据库表");String createTable = "create table if not exists NewsTable(" +"nID Integer primary key AUTOINCREMENT," +"Title text(50) not null," +"Source text(50) not null," +"Time text(10) not null," +"Content text(100) not null" +")";db.execSQL(createTable);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

SetNews代码

package com.example.Work6;public class SetNews {//插入两条数据public static News setNews(News news,int flag){if(flag==0){news.setTitle("美国务院试图将中国蚂蚁集团列入黑名单,外交部回应");news.setSource("来源:澎湃新闻");news.setContent("10月15日,外交部发言人赵立坚主持例行记者会。有记者提问,有媒体报道称,美国国务院正试图将中国蚂蚁集团列入黑名单。外交部对此有何评论?\n" +"赵立坚表示,中方一贯反对美国泛化国家安全概念,滥用国家力量,无理打压外国企业的霸权行径。美方应切实尊重市场经济和公平竞争原则,遵守国际经贸规则,为各国企业在美国投资经营提供开放、公平公正、非歧视的营商环境。中方将继续采取必要措施,维护中国企业的正当权益。");news.setTime("2020-10-15 15:50");}else if(flag==1){news.setTitle("淘宝台湾:今起陆续关闭下单等前台功能,年底停止运营");news.setSource("来源:澎湃新闻");news.setContent("据台湾“中央社”等岛内媒体10月15日报道称,经营淘宝台湾的克雷达公司发布声明表示,将在12月31日晚间23时59分后,停止在台湾的营运,淘宝台湾于10月15日上午11时起关闭平台下单等功能。\n" +"澎湃新闻(www.thepaper.cn)10月15日查询发现,淘宝台湾网首页已发布了“淘宝台湾营运计划调整公告”(以下简称“公告”)。\n" +"公告称:淘宝台湾平台在台落地服务近一年,感谢所有消费者这段时间的支持与爱护。本公司经慎重评估后,决定于2020年10月15日早上11:00起,陆续关闭淘宝台湾平台下单等前台功能,平台其他服务(如:电子货币包提领、官方物流、客服中心等)仍持续运作至2020年12月31日,随后正式下线。");news.setTime("2020-10-15 12:58");}return news;}
}

News.java代码

package com.example.Work6;
import java.io.Serializable;
public class News implements Serializable {public String title;public String content;public String Source;public String Time;public News() {}public News(String title, String source, String time,String content) {this.title = title;this.content = content;Source = source;Time = time;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getSource() {return Source;}public void setSource(String source) {Source = source;}public String getTime() {return Time;}public void setTime(String time) {Time = time;}
}

DetailActivity代码

package com.example.Work6;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;public class DetailActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_detail);Intent intent=getIntent();News news=(News)intent.getSerializableExtra("News");TextView text1 = (TextView) findViewById(R.id.ftext1);TextView text2 = (TextView) findViewById(R.id.ftext2);TextView text3 = (TextView) findViewById(R.id.ftext3);TextView text4 = (TextView) findViewById(R.id.ftext4);text1.setText(news.getTitle());text2.setText(news.getSource());text3.setText(news.getTime());text4.setText(news.getContent());}}

安卓SQLite和SQLiteDataBase的应用相关推荐

  1. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下! 建立一个类 并继承SQLiteOpenHelper public ...

  2. 利用安卓SQLite修改QQ运动步数方法分享 简单粗暴

    这个方法简单粗暴,比昨天的安卓用户秒刷QQ运动步数教程+软件下载更简单.亲测百分百成功,根据教程图片的步骤找到文件进行编辑保存即可. 1.自行百度搜索"安卓SQLite汉化版"下载 ...

  3. Android Studio 安卓sqlite数据库查询

    注意 查询安卓sqlite数据库时,确定已经创建了数据库,并且配置了adb命令系统环境,同时查询设备需要root权限,这里我用安卓虚拟机APls(自动开放权限)作为演示 步骤 打开虚拟机,输入adb ...

  4. 在eclipse安卓sqlite怎么用_把安卓手机性能发挥到极致之-Aid Learning

    一直以来,由于工作条件限制,单位只能使用XP!!!什么64位操作系统,什么新Python,什么64位Java,统统与我无缘!!! 魂牵梦绕,寻求替代方案,什么Intel NUC,什么树莓派,什么淘宝小 ...

  5. 通过SQLiteStudio实时查询修改安卓SQLite数据库

    序 之前提到了SQLiteStudio 软件长?这样 一个可视化的SQLite数据库管理工具 官网地址:https://sqlitestudio.pl/index.rvt 之前一直是这么使用它的 先访 ...

  6. 英语单词SQL数据库一千词带音标例句发音【安卓SQLite网页MySQL皆可用】

    [一千英语单词加翻译音标例句发音sql文件db文件] 蛋疼,上传完文件发现默认就是5C币一次,居然不是免费的,这里直接放出sql文件好了.供大家免费复制. 包含了一千多个英语单词的sql文件.移动安卓 ...

  7. 安卓 sqlite数据存入mysql_详解Android数据存储—使用SQLite数据库

    SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库.Android提供了3种操作数据的方式,SharedPreference(共享首选项).文件存储以及SQLite数据库. ...

  8. 安卓 SQLite error:SQLite database locked exception while compling : PRAGMA journal_mode .....

    项目中频繁的切换Tab键,会频繁地从数据库读取数据,这是报出这样的错误: 解决方法是在国外的某论坛找到的 : 在插入数据的时候,首先: SQLiteDatabase db = SQLiteDataba ...

  9. 安卓 sqlite数据存入mysql_在Android上简单导出和导入SQLite数据库

    这是一种将数据库导出到名为备份文件夹的文件夹的简单方法,您可以根据需要对其进行命名,以及从同一文件夹导入数据库的简单方法public class ExportImportDB extends Acti ...

最新文章

  1. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、使用set_minor_locator函数指定坐标轴次刻度数值倍数(MultipleLocator)
  2. 深圳一普通中学老师工资单曝光,秒杀程序员,网友:真酸~
  3. NLP之ASR:语音识别技术(Automatic Speech Recognition)的简介、发展历史、案例应用之详细攻略
  4. Oracle错误代码:ORA-28002导致密码消失
  5. PHP面试题:你所知道的php数组相关的函数?
  6. shell 数学运算
  7. 10-3 5-3 查询生产最高速度的计算机(PC或便携式电脑)厂商 (20 分)
  8. Python 读取json文件
  9. python plot_training_log.py 6 asia.png logfituing_vggface_0114.log
  10. liunx 中mysql 远程连不上_linux中MySQL本地可以连接,远程连接不上问题
  11. linux 文件管理命令
  12. PHP微信模版消息有时收不到_PHP微信开发之模板消息回复
  13. 2018国庆雅礼D3T1
  14. python 高阶函数之filter
  15. 微信小程序获取二维码scene参数报错 41030:invalid page rid: xx-xx-xx
  16. iphone刷android怎么刷机,不用刷机 让iPhone运行Android 6.0
  17. javaGUI自制五子棋-实践周大作业
  18. 八皇后算法带给我们的启示吧
  19. 给大家分享一下我的数字化转型研究资料
  20. jquery的事件命名空间详解

热门文章

  1. Arduino 负温度系数热敏电阻(NTC)测温
  2. 程序员修炼之道系列 | 使用曳光弹找到目标
  3. 如何使用网络调试助手调试UDP
  4. 告别996-SAXReader读取xml配置文件
  5. R语言重读微积分(一):极限
  6. C++冒泡排序代码实现
  7. gun and rose 的我很喜欢的一首歌
  8. java http 中文乱码_关于java发送http请求时中文乱码的一种解决办法
  9. JAVA—IO流详解
  10. 2022年湖北建筑八大员报考条件和报名时间考试时间是什么时候呢?甘建二