新版Android开发教程+笔记十二--文件存取、数据库编程
黑马程序员android开发笔记及源码
01、什么是3G02、android系统简介03、android背景介绍04、android的framewor简介05、两种虚拟机的比较06、sdk的下载以及简介07、创建android模拟器08、ddms简介09、platform-tools的简介及常见adb指令10、android项目的目录结构11、android下apk安装的过程12、常见的adb指令介绍13、创建模拟器遇到的常见错误14、电话拨号器15、点击事件的四种写法16、短信发送器17、相对布局&单位介绍18、现形布局&布局的组合19、表格布局&绝对布局20、帧布局21、测试相关概念22、android下junit测试框架配置23、logcat简介24、保存文件到手机内存25、android下文件访问的权限26、保存文件到SD卡中27、分析setting源代码获取SD卡大小28、_sharePreference入门29、xml文件的序列化30、采用pull解析xml文件31、采用断电调试的方法观察pull解析的的流程32、android下创建一个sqllite数据库33、sql语句实现数据库的增删改查34、系统api实现数据库的增删改查&Sqlite3工具的使用35、数据库的事物36、listView入门37、采用layoutInflater打气筒创建一个view对象38、采用数据适配器ArryAdapter39、常用数据适配器simpleAdapter40、数据适配器总结41、内容提供者简介42、内容提供者的实现43、短信的备份44、插入一条记录到系统短信应用45、内容观察者46、获取系统的联系人信息47、保存联系人到系统通讯录48、读取联系人的一个小细节49、网络图片查看器50、anr产生的原理&如何避免51、android消息机制入门52、网络html查看器53、字符乱码问题的处理54、采用get方式提交数据到服务器55、采用post方式提交数据到服务器56、提交数据到服务器中文乱码问题的处理57、采用httpclient提交数据到服务器58、异步http框架简介&实现原理59、异步http框架提交数据到服务器60、上传文件到服务器61、smartimageview&常见开源代码62、多线程下载的原理63、多线程断点下载的原理64、多线程java代码移植到android65、多线程下载文本页面的更新66、显示意图激活另一个activity67、隐式意图激活另一个activity68、隐式意图的配置69、隐式意图和显示意图的使用场景70、在不同activity之间数据传递71、activity的声明周期72、activity的启动模式73、activity横竖屏切换的声明周期74、开启新的activity获取他的返回值75、请求码和结果码的作用76、利用广播实现ip拨号77、短信窃听器78、自定义广播时间&发送自定义广播&广播接受者优先级79、采用服务执行长期后台操作80、采用服务窃听电话&服务的声明周期81、android进程优先级&为什么使用服务82、绑定方式开启服务&调用服务的方法83、服务的声明周期(混合开启84、采用aidl绑定远程服务85、代码注册广播接受者&利用广播调用服务的办法86、加载大图片到内存87、获取图片exif信息88、从gallery获取图片89、图片画画板90、扒开美女衣服91、图片的缩放92、图片的旋转93、图片的平移&镜面&倒影效果94、图片的合成95、图片的颜色处理96、多媒体播放api简介97、人脸识别98、mediaplayer的生命周期99、soundpoo简介100、sufaceview的生命周期101、播放在线视频102、视频播放器进度的处理103、调用系统照相机拍照和录像104、采用camera拍照105、常见对话框106、notification入门107、菜单108、android下的样式109、android下的主题110、代码编写ui111、html创建ui112、帧动画113、代码创建创建的tween动画114、xml文件定义动画115、传感器简介116、117、杀死进程118、apk的安装119、应用程序的反编译120、动态创建fragment121、用fragment创建一个选项卡122、fragment的向下兼容性123、fragment的生命周期124、fragment之间的通讯125、应用程序国际化04、android的framewor简介Wap:wait and playWireless Makeup Language(WML)精简的html语言Applications:android自带的基本上层应用Aplication framework:应用程序框架Librarics:Linux lernel:05、两种虚拟机的比较编译后文件格式:jvm:.java->.class->.jardalvik vm:.java->.dex->.odex基于的架构:jvm:基于栈的架构dalvik vm:基于寄存器的架构Cpu直接访问寄存器因此dalvik虚拟机的效率比jvm高06、sdk的下载以及简介->获取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,实际上是eclipse的插件)SDK具体内容Android->SDK Plateform:开发时使用到的jar包->Samples for sdk:->ARM EABI V7a System Image:模拟器运行时的镜像->Intel n86 Aton System:模拟器运行时的镜像->MIPS System Image:模拟器运行时的镜像->google APIs:google提供的jar包,可以直接使用google提供的一些API ->source for android SDK:SDK全部的源代码Extrals:->tools:开发的工具->support library:实现高版本的android向下的兼容->google Admed Ads SDK:gongle提供的广告插件->Analyties App Irackiong SDK:应用的用户分析->cloud message:云消息->gongle play service:收费服务->google USB Driver:真实的设备驱动开发时:基于4.0,兼容2.2、2.3.307、创建android模拟器avd:android virture developerVGA:480*640(电视的标准分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更宽)08、ddms简介ddms:模拟器不支持中文,因此发送中文会显示不出来09、platform-tools的简介及常见adb指令Android调试桥:内部实现就是socket让两个系统之间实现数据交互->reset adb:模拟器找不到时候可以重启->adb device:列出所有的连接的设备->adb kill-server:杀死adb调试桥->adb start-server 启动adb调试桥dx.bat:将.class文件打包10、android项目的目录结构一:SDK的目录结构->Samples->Api demo:根据API demo(模拟器上面可以看见)的效果可以在sample中看见相应的代码->Source:jar包所有的sdk源代码都在这个文件夹里->SystemImage:系统镜像->temp:下载更新临时存储的文件夹,一般是空的->tools:emulater.ext 不同版本的模拟器二:New Android Application->theme:留给以后作为扩展,现在并没有太大的作用->target SDK:一般选择高版本,因为高版本对下兼容->mark project as a library:一般不选择,意思是将这个项目提供一个jar包供别人使用三:文件夹目录.setting:设置目录assets:资产目录,存放一些文件,这些文件会被原封不动打包到应用程序的apk中bin:gen:自动生成的目录->builderConfig.java:生成的配置信息->R.java:Android 4.1.2->android.jar开发环境,jar包可以在properties中修改,jar包就是SDK011、Android下apk的安装过程一、Android安装过程分析:->setContentView:甚至view的对象,把里面的xml文件加载到->在project中选择build automaticly会自动把文件生成字节码文件,.class $代表的class文件生成的是内部类->dex.bat文件会把.class文件生成.dex文件->apk压缩文件解压内部内容->META-INF:应用程序的签名eclipse的调试签名文件->res:资源文件->classes.dex:class文件->resources.arsc:资源ID映射->android软件安装的过程:->拷贝xxx.apk带/data/app/xxx-1.apk->在/data/data目录下创建一个文件夹,文件夹名称当前应用程序的报名012、常见adb指令前提:->设备连接上电脑而且驱动安装正常,如果安装不正常的话,会有黄色的问号显示;->设备上打开USB调试;指令:->adb device(如果启动发现这个程序没有安装会自动安装)->adb kill-server->adb start-server->adb uninstall <包名>->adb -s emulator-5554 install c:\\users\\administrator\\hello.apk如果有多个设备的话,如果不指定安装的是哪个设备程序会报错->adb push haha.prop /sdcard/haha.txt 将文件移到(360管家,豌豆荚之类的软件他们也是用的adb指令,倘若电脑上装这些软件的话,会因为两个adb指令抢端口号而挂掉)(adb版本之间兼容不是很好,经常报错可以考虑下版本的问题)->adb shell:远程连接到了android的linux终端ls:显示文件夹ps:显示正在运行的程序ping:网络连通性013、创建模拟器遇到的常见错误->路径最好不要有中文:->应用安装不上,或者安装模拟器的时候开启一个新的模拟器:可能是模拟器的资源被占用,模拟器在运行的时候其实占用着硬盘上面的一个文件,这个文件位于工作空间.android/avd/iphone.avd 里面会有镜像文件,当一个模拟器开启起来了,就给你创建一个文件夹.knock的文件夹,代表着这个模拟器被锁定了,如果把模拟器关掉,就没有程序占据这几个镜像资源了,那么这几个程序就会被自动删除。
安卓中知识点总结
安卓中知识点总结作为一名Android开发者,了解和掌握Android开发的知识点是非常重要的。
本文将对Android开发涉及的各种知识点进行总结,包括Java语言基础、Android框架、界面设计、数据库操作、网络请求、性能优化等方面的知识点。
一、Java语言基础1. 类和对象类是Java语言中的基本概念,它是对象的模板。
对象是类的实例,是具体的实体。
了解类和对象的概念是Java编程的基础。
2. 继承和多态继承是Java语言中非常重要的特性,它使得子类可以继承父类的属性和方法。
多态是继承的延伸,它使得一个对象可以以多种形态出现,提高了程序的灵活性和扩展性。
3. 接口和抽象类接口和抽象类都是Java中用来实现多态和封装的机制,它们可以让程序员定义一个函数,并且由实现类来实现该函数的具体功能。
4. 异常处理异常处理是Java语言中的重要机制,在处理IO异常、运行时异常等方面都有着重要作用。
5. 泛型泛型是Java中的一个重要特性,它使得类或方法可以接受任意类型的数据作为参数,提高了代码的复用性和灵活性。
6. 并发并发是指在同一时间段内同时运行多个程序或多个线程。
在Android开发中,了解并发编程的知识点可以帮助我们编写高效的多线程应用。
7. I/O流I/O流是Java中用来进行输入输出操作的重要概念,了解文件操作、网络操作、序列化等知识点对Android开发非常重要。
二、Android框架1. ActivityActivity是Android应用的一个重要组件,它负责提供一个用户界面来展示和与用户交互。
了解Activity的生命周期、启动方式、传递数据等知识点是非常重要的。
2. FragmentFragment是Android中用来实现复杂界面的一种重要组件,它可以在一个Activity中管理多个界面碎片。
了解Fragment的生命周期、使用方式、通信方式等知识点是非常重要的。
3. ServiceService是Android中用来实现后台任务的一种组件,它可以在后台执行长时间运行的任务。
Android学习笔记032之数据存储—文件存储读取
Android学习笔记032之数据存储—文件存储读取我们知道,在AndroidOS中,提供了五中数据存储方式,分别是:ContentProvider存储、文件存储、SharedPreference存储、SQLite数据库存储、网络存储。
其中ContentProvider存储在我们介绍ContentProvider的时候已经介绍过了,现在我们学习其它的数据存储方式。
这一篇,我们介绍文件存储。
1、文件的操作模式我们在学Java的时候都知道,Java中的IO操作来进行文件的保存和读取,Android是基于Linux的,与Java不同的是Android在Context类中封装好了输入流和输出流的获取方法,分别是:FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数用于指定文件名,第二个参数指定打开文件的模式。
Android 提供的文件模式有:MODE_PRIVATE:Android提供的默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
此外,Android还提供了其它几个重要的文件操作的方法:getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录File getFilesDir():获取app的data目录下的绝对路径String[] fileList():返回app的data目录下数的全部文件deleteFile(String fileName):删除app的data目录下的指定文件2、读写文件Android的读写文件和Java一样,也是一样通过IO操作实现,下面我们通过一个简单的例子走一下这个流程:布局文件代码:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><EditTextandroid:id="@+id/ed_file_save"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/btn_file_save"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="保存内容" /><Buttonandroid:id="@+id/btn_file_read"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="读取内容" /><TextViewandroid:id="@+id/tv_read_file"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:textColor="#000"android:textSize="14sp" /></LinearLayout>Activity代码:package com.example.datasave;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*** Created by Devin on 2016/7/19.*/public class FileDataActivity extends AppCompatActivity {private EditText ed_file_save;private Button btn_file_save;private Button btn_file_read;private TextView tv_read_file;private String fileName = " hello.txt";@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_file);ed_file_save = (EditText) findViewById(R.id.ed_file_save);btn_file_save = (Button) findViewById(R.id.btn_file_save);btn_file_read = (Button) findViewById(R.id.btn_file_read);tv_read_file = (TextView) findViewById(_read_file);btn_file_save.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String fileContent = ed_file_save.getText().toString();try {save(fileContent);ToastUtils.showToast(FileDataActivity.this, "文件写入成功");} catch (Exception e) {e.printStackTrace();ToastUtils.showToast(FileDataActivity.this, "文件写入失败");}}});btn_file_read.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {try {String content = read();tv_read_file.setText("文件的内容是:" + content);} catch (IOException e) {e.printStackTrace();ToastUtils.showToast(FileDataActivity.this, "读取文件失败!");}}});}public void save(String fileContent) throws Exception {FileOutputStream output = this.openFileOutput(fileName, Context.MODE_PRIV ATE);output.write(fileContent.getBytes());output.close();}public String read() throws IOException {//打开文件输入流FileInputStream input = this.openFileInput(fileName);byte[] temp = new byte[1024];StringBuffer stringBuffer = new StringBuffer("");int len = 0;while ((len = input.read(temp)) > 0) {stringBuffer.append(new String(temp, 0, len));}//关闭输入流input.close();return stringBuffer.toString();}}最后是实现效果图:这里文件使用的模式是私有模式,只能本应用读取还会覆盖原文件,这样就可以实现简单的文件读写。
Android开发学习笔记:数据存取之SQLite浅析
Android开发学习笔记:数据存取之SQLite浅析update(String table,ContentValues values,String修改记录whereClause,String[]whereArgs)execSQL(String sql)执行一条SQL语句close()关闭数据库1、打开或者创建数据库在Android中以使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库。
它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException。
下面是创建名为“stu.db”数据库的代码:1db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.lingdududu.db/d atabases/stu.db",null);2、创建表创建一张表很简单。
首先,编写创建表的SQL语句,然后,调用SQLiteDatabase的execSQL()方法来执行SQL语句便可以创建一张表了。
下面的代码创建了一张用户表,属性列为:_id(主键并且自动增加)、sname(学生姓名)、snumber(学号)2private void createTable(SQLiteDatabase db){34//创建表SQL语句5String stu_table="create table usertable(_id integer primary key autoincrement,sname text,snumber text)";67//执行SQL语句8db.execSQL(stu_table);9}3、插入数据插入数据有两种方法:①SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法,参数一是表名称,参数二是空列的默认值,参数三是ContentValues类型的一个封装了列名称和列值的Map;②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行第一种方法的代码:10private void insert(SQLiteDatabase db){1112//实例化常量值13ContentValues cValue=new ContentValues();1415//添加用户名16cValue.put("sname","xiaoming");1718//添加密码19cValue.put("snumber","01005");2021//调用insert()方法插入数据22db.insert("stu_table",null,cValue);23}第二种方法的代码:24private void insert(SQLiteDatabase db){2526//插入数据SQL语句27String stu_sql="insert into stu_table(sname,snumber) values('xiaoming','01005')";2829//执行SQL语句30db.execSQL(sql);31}4、删除数据删除数据也有两种方法:①调用SQLiteDatabase的delete(String table,String whereClause,String[]whereArgs)方法,参数一是表名称,参数二是删除条件,参数三是删除条件值数组;②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。
Android应用开发存储技术--文件存储
➢ 通过openFileOutput获取文件输出流,将文本框中的内容写进文件中。 ➢ 通过openFileInput获取文件输入流,将文件内容写入到TextView中。
课堂练习
课堂练习1:安卓中文件读写的运用
建议完成时间:10分钟 任务描述
➢ 在Activity内添加EditText,TextView控件。 ➢ 使用openFileOutput将界面中文本框的信息写入文件file.txt中。 ➢ 使用openFileInput将文件file.txt中的数据读到TextView控件中。
Activity.MODE_PRIVATE); outputStream.write(content.getBytes()); outputStream.flush(); outputStream.close();
普通文件操作示例演示
课堂练习1:安卓中文件读写的运用
建议完成时间:10分钟 Βιβλιοθήκη 务描述Android应用开发
存储技术-文件解析与处理
第1节 普通文件操作 第2节 SharedPreferences 第3节 XML解析 第4节 用SAX引擎解析XML 第5节 实现面向对象的封装 第6节 SD卡读写操作
主要内容
熟练掌握普通文件的读写操作。 熟练掌握SharedPreference文件操作。 熟悉XML解析引擎的特点。 熟悉掌握SAX引擎解析XML的用法。 掌握面向对象的数据封装。 熟练掌握SD卡读写操作的方法。
√
介绍向SharedPreferences写数据。
4 外部访问SharedPreferences √
√
√
介绍外部访问SharedPreferences。
SharedPreferences概述
Android应用中的数据存储和数据库管理
Android应用中的数据存储和数据库管理第一章:数据存储概述Android应用开发中,数据存储是一个重要的方面。
数据存储可以包含用户信息、应用设置、图片、音频、视频以及其他类型的数据。
在Android平台上,开发者可以使用多种方法来实现数据存储,包括Shared Preferences、内部存储、外部存储和数据库等。
本章将对这些方法进行简要介绍。
第二章:Shared PreferencesShared Preferences是一种轻量级的数据存储方式,适用于存储少量的键值对。
它提供了一种简单的方式来保存应用的配置和用户的偏好设置。
开发者可以使用SharedPreferences类来读取和写入Shared Preferences数据。
此外,开发者还可以注册Shared Preferences的监听器,以便在数据发生变化时相应地更新应用。
第三章:内部存储内部存储适用于存储应用的私有数据文件。
每个应用都拥有自己的内部存储空间,其他应用无法访问。
开发者可以使用File类来创建、读取和写入内部存储中的文件。
此外,开发者还可以使用SharedPreferences类来存储较小的数据量。
第四章:外部存储Android设备通常都有一块外部存储,开发者可以利用这块存储空间来存储大量的数据。
使用外部存储需要获取相应的权限,并且需要检查外部存储是否可用。
一般来说,开发者可以使用File类来访问外部存储。
此外,开发者还可以使用MediaScanner来通知系统有新的媒体文件被添加到了外部存储中。
第五章:数据库管理数据库管理是Android应用开发中的一个重要方面。
开发者可以使用SQLite数据库来存储和管理应用的结构化数据。
SQLite是一种嵌入式数据库引擎,它是Android系统自带的,不需要额外的安装和配置。
开发者可以使用SQLiteOpenHelper类来创建和升级数据库,使用SQLiteDatabase类来执行数据库操作。
android文件保存
getFilesDir() 返回一个内部存储器上的文件夹
getCacheDir() 返回一个给当前app的内部存储器上的临时缓存文件,当在不需要使用该文件时,
必须删除该文件,并且应指定一个合适的内存大小限制,比如1MB,如果系统开始运行缓慢,则会无警告的删除这些缓存文件。
可以通过上面的方法获取的文件夹在内部存储器上创建一个新的文件:
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),albumName);
if(!file.mkdirs()){
Log.e(LOG_TAG,"Directory not created");
3.文件的删除
如果要删除一个文件,这可以直接调用delete()方法来删除。 eg. myFile.delete();
如果要删除的文件为内部存储器上的文件,则也可以调用Context的deleteFile()方法去删除该文件
ห้องสมุดไป่ตู้
4.将文件保存到内部存储器
可以通过以下两种方法获取文件或者文件目录:
}
return file;
}
2.查询剩余空间
调用方法getFreeSpace() 和getTaotalSpace().这两个方法分别查询当前存储盘的可用空间和总容量。
我们没必要在写文件之前去检查存储盘的可用空间,我们可以通过对catch IOException 进行分析。
1.//如果要保存一个app的私有文件,可以通过调用方法getExternalFilesDir()
Android开发中的数据存储和访问方法详解(二)
一、引言在当今移动互联网时代,Android系统已经成为最重要的移动操作系统之一。
作为Android开发者,数据存储和访问是必不可少的技术领域。
本文将详细介绍Android开发中的数据存储和访问方法,帮助读者更好地理解和应用这些技术。
二、内部存储内部存储是指应用程序在设备上的私有存储空间。
在Android中,每个应用都有一个私有的内部存储空间,其他应用无法访问,确保了数据的安全性。
我们常用的方法有文件存储和SharedPreferences两种。
文件存储是将数据以文件的形式保存在设备上。
开发者可以通过Java的File和FileOutputStream来实现文件的读写操作。
当需要保存少量简单数据时,可以使用SharedPreferences,它是一种键值对的存储方式,非常方便快捷。
三、外部存储外部存储是指设备上的公共存储空间,可以被所有应用访问到。
Android系统提供了一些方法来操作外部存储,如读写SD卡上的文件。
外部存储的主要优点是容量大,但相对来说对数据的安全性和隐私保护较差。
在Android开发中,我们可以通过File类来操作外部存储。
首先需要获取外部存储的状态,确认是否有可用的外部存储空间,并声明文件的写入权限。
然后可以使用FileOutputStream来将数据写入外部存储。
四、数据库数据库是Android开发中常用的数据存储和访问方式。
Android系统内置了SQLite数据库,开发者可以通过SQLiteOpenHelper类来创建、打开和管理数据库。
SQLite是一种轻量级的数据库引擎,非常适用于移动设备。
在使用数据库之前,首先需要创建数据库表和定义数据结构。
通过创建一个继承自SQLiteOpenHelper的子类,可以实现数据库的创建和版本管理等功能。
然后可以使用SQLiteDatabase类来执行增删改查等操作。
通过使用SQLite数据库,开发者可以更高效地存储和管理大量结构化数据。
移动应用开发中的数据本地存储技术
移动应用开发中的数据本地存储技术随着智能手机的普及和移动应用的飞速发展,人们对于移动应用的需求越来越高。
而移动应用的核心功能之一就是数据的存储和管理。
在移动应用开发中,我们常常需要将用户的数据保存在本地,以便用户随时随地进行查看和修改。
为了实现这一目标,开发者需要掌握各种数据本地存储技术。
一、文件存储在移动应用开发中,最简单的数据本地存储技术就是文件存储。
通过将数据保存在文件中,我们可以实现数据的长期存储,并且在需要的时候快速读取。
文件存储可以灵活地存储各种类型的数据,包括文本、图片、音频等等。
在移动应用开发中,我们可以使用文件流和文件路径来读取和写入文件。
二、SharedPreferencesSharedPreferences是Android平台上一种常用的数据本地存储技术。
它以键值对的形式存储数据,并且可以跨进程访问。
SharedPreferences的底层实现其实就是一个xml文件,通过读取xml文件来获取数据。
通过SharedPreferences,我们可以方便地存储和读取一些简单的配置数据,如用户的偏好设置、应用的配置信息等等。
三、数据库存储在移动应用开发中,有时候我们需要存储大量结构化数据,这时候文件存储和SharedPreferences就显得力不从心了。
这时候我们可以使用数据库存储技术来进行数据的本地存储。
Android平台提供了SQLite数据库,它是一种轻量级的关系型数据库。
通过使用SQL语句,我们可以创建表格并存储和查询数据。
数据库存储技术对于大规模数据存储和查询非常高效。
四、ORM框架在实际的移动应用开发中,我们可能会遇到大量的数据操作,这时候手写SQL 语句就显得非常繁琐和复杂。
为了简化数据操作,提高开发效率,我们可以使用ORM框架。
ORM全称为Object-Relational Mapping,即对象关系映射。
ORM框架可以帮助我们将Java对象和数据库表进行映射,从而实现数据库的增删改查操作。
网络开发笔记12_数据采集与存储
{ rs->MoveLast(); UINT i=rs->m_adcId; i++; rs->MoveLast();// 重要 rs->Edit(); // 存储 rs->AddNew(); rs->m_adcId=i; rs->m_adcVal=buf; rs->Update(); } rs->Close(); Sleep(1000); } } 五 线程的使用 BOOL CConnectDBDlg::OnInitDia log() { // 前面保留 ………………………………. // 后面添加如下代码 // TODO: Add extra initia lization here CDatabase db; if(db.Open(_T("sjcjDB"),false,false,_T("ODBC;"),false)) { this->rs= new CAdcInf(&db); CDbThread *mythread=new CDbThread(rs);// 创建一个线程 mythread->CreateThread(0,0,NULL);// 使线程运行起来 } return TRUE; } 六 查询的相关更改 void CConnectDBDlg::OnButton1() { CString strSql; rs->Open(AFX_DB_ USE_DEFAULT_TYPE, adcTbl")); if(rs->IsOpen()) { // return TRUE unless you set the focus to a control
网络开发笔记之数据采集与存储
――云*飞扬 2010-11-10
客户端开发教程:学会使用常见的文件存储技术(一)
客户端开发教程:学会使用常见的文件存储技术在当今数字化时代,移动应用程序的开发和使用愈发普遍。
而客户端开发是其中的重要一环,它不仅要求我们有扎实的编码能力,更需要熟悉各种文件存储技术。
本文将分析几种常见的文件存储技术,并给出相应的使用教程,帮助你更好地开发移动应用。
一、本地文件存储本地文件存储是客户端开发中最常见的一种方式,通过将数据存储在设备的本地文件系统中,实现数据的读取和写入。
在Android平台上,我们可以使用内部存储和外部存储两种方式。
1. 内部存储内部存储是应用程序私有的存储空间,其他应用无法访问。
为了使用内部存储,我们需要先获取应用程序的内部存储目录,并通过File类进行文件的读写操作。
代码示例:```File file = new File((), "file_name");FileOutputStream fos = new FileOutputStream(file);("Hello, World!".getBytes());();```2. 外部存储外部存储是设备的共享存储空间,所有应用均可访问。
通过使用Environment类的方法,我们可以获取外部存储的根目录,并进行文件的读写操作。
代码示例:```File file = new File((), "file_name");FileOutputStream fos = new FileOutputStream(file);("Hello, World!".getBytes());();```二、数据库存储数据库存储是一种结构化的数据存储方式,适用于大量数据的存取和查询。
在Android开发中,我们常用的数据库存储方式是SQLite。
下面是一个简单的SQLite数据库操作示例。
1. 创建数据库```public class MyDatabaseHelper extends SQLiteOpenHelper {private static final String DB_NAME = "my_";private static final int DB_VERSION = 1;public MyDatabaseHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {("CREATE TABLE IF NOT EXISTS users (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {("DROP TABLE IF EXISTS users");onCreate(db);}}```2. 数据库操作```MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);SQLiteDatabase db = ();// 插入数据ContentValues values = new ContentValues();("name", "Tom");("age", 20);("users", null, values);// 查询数据Cursor cursor = ("users", null, null, null, null, null, null);while (()) {String name = (("name"));int age = (("age"));("TAG", "name: " + name + ", age: " + age);}// 更新数据ContentValues values = new ContentValues();("age", 21);("users", values, "name = ?", new String[]{"Tom"});// 删除数据("users", "name = ?", new String[]{"Tom"});();();```三、SharedPreferencesSharedPreferences是Android平台提供的一种轻量级的存储机制,它能够存储简单的键值对数据。
Android开发中的数据存储技术研究
Android开发中的数据存储技术研究随着移动互联网和智能手机的普及,人们对于手机应用程序的需求越来越高,要求对手机数据进行高效、安全的存储和管理。
而Android作为最广泛使用的移动操作系统之一,其数据存储技术也成为我们开发人员必须熟练掌握的内容之一。
本文将重点探讨在Android开发中的数据存储技术,希望能够为开发人员提供一些有价值的参考。
一、 SQLite数据库SQLite数据库是一种轻量级的数据库管理系统,应用广泛,包括了操作系统、Web浏览器、工具软件等等。
在Android开发中,SQLite数据库也是常用的数据存储技术。
使用SQLite数据库,我们可以方便地进行本地数据的存储和管理,应用场景很多。
1.1 SQLite的基本概念在使用SQLite数据库之前,我们需要先了解一些基本概念。
下面介绍三个基本概念:表、行、列。
表:SQLite中的表与其他数据库类似,是一种数据结构,用于存储数据。
表由行和列组成,行表示一个条目,列是条目中的一个字段。
行(Record):SQLite中的行与表中的行类似,它是一种数据结构,表示表中的一条纪录。
行的数量表示表中数据的数量。
列(Field):SQLite中的列与表中的列类似,它是一种数据结构,表示表中的一个字段。
列的数量代表了表的属性数量。
1.2 SQLite的使用在Android中使用SQLite通常需要进行以下步骤:1.创建数据库在Android中创建一个SQLite数据库其实就是创建一个SQLiteOpenHelper对象。
在该对象中,我们需要实现其构造函数、onCreate()和onUpgrade()等方法,并在onCreate()方法中创建数据库,数据表和数据默认记录。
2.插入数据在SQLite中插入数据通常需要使用insert()方法,而该方法需要传入数据库名以及一个ContentValues类型的参数,ContentValues是用来存储数据的类。
Android开发学习笔记:数据存取之File浅析
Android开发学习笔记:数据存取之File浅析Android系统中提供了一种文件读写的方法,可以将一些数据以文件的形式保存在设备中。
比如一些word文档,PDF文档,图片,音频,视频文件等。
使用文件读写方法的步骤:1.调用Context.openFileInput()方法获得Java文件输入流(FileInputStream)2.调用Context.openFileOutput()方法获得java文件输出流(FileOutputStream)3.使用Resources.openRawResource(R.raw.DataFile)方法返回InputStream下面的具体实例,在一个Activity里面创建两个EditText和两个Button,第一个EditText和Button将EditText的内容写到文件file.txt文件中。
第二个EditText和Button将内容从文件file.txt中读取出来显示。
文件被默认保存在/data/data/package/files下面。
MainActivity.java1package com.android.file;23import java.io.FileInputStream;4import java.io.FileOutputStream;5import android.app.Activity;6import android.os.Bundle;7import android.view.View;8import android.view.View.OnClickListener;9import android.widget.Button;10import android.widget.EditText;1112public class MainActivity extends Activity{13//声明文件名字符串常量14private static final String FILE_NAME="file.txt";15private Button writeBtn,readBtn;16private EditText writeText,readText;17@Override18public void onCreate(Bundle savedInstanceState){19super.onCreate(savedInstanceState);20setContentView(yout.main);21writeBtn=(Button)findViewById(R.id.Button1);22readBtn=(Button)findViewById(R.id.Button2);2324writeText=(EditText)findViewById(R.id.EditText1); 25readText=(EditText)findViewById(R.id.EditText2); 2627writeBtn.setOnClickListener(new OnClickListener(){ 28@Override29public void onClick(View v){30//写内容31write(writeText.getText().toString());32}33});3435readBtn.setOnClickListener(new OnClickListener(){ 36@Override37public void onClick(View v){38//读内容39readText.setText(read());40}41});42}4344private String read(){45try{46//实例化文件输入流对象47FileInputStream fis=openFileInput(FILE_NAME); 48//定义缓存数组49byte[]buffer=new byte[fis.available()];50//读到缓冲区51fis.read(buffer);52return new String(buffer);53}catch(Exception e){54 e.printStackTrace();55}56return null;57}5859private void write(String content){60try{61//实例化文件输出流62//openFileOutput(String name,int mode)63//第一个参数文件名64//第二个是模式65//MODE_APPEND表示要创建的文件存在则新写入的数据不会覆盖以前的数据。
android 开发核心知识点笔记
android 开发核心知识点笔记1. 引言1.1 概述:本文是关于Android开发核心知识点的笔记,旨在帮助读者系统地了解和掌握Android应用开发的基础知识。
针对大多数初学者在学习Android开发过程中所遇到的困惑和问题,作者从原理、组件、界面、数据存储、网络通信等方面进行了全面整理和总结。
1.2 文章结构:文章主要分为6个部分,每个部分都涵盖了Android开发的重要内容。
首先,在引言部分我们会提供一个概述,并介绍文章整体结构;接着,我们将从Android 开发基础知识开始讲解,包括组成部分、组件通信机制以及Activity声明周期;然后,我们会讨论用户界面开发,介绍布局文件和控件、屏幕适配和多语言支持以及用户输入和手势处理等相关知识;紧接着是数据存储与持久化方面的内容,包括Shared Preferences的使用、SQLite数据库操作以及文件操作与外部存储访问权限管理机制;随后,我们将探讨网络与通信操作,包括网络请求与网络状态监听、JSON和XML数据解析与封装发送请求数据包的原理与方式比较以及WebSocket的使用及原理;最后,在结论部分我们将对全文进行总结,重点总结主要知识点和经验心得。
1.3 目的:本文的目的是帮助读者建立起对Android开发核心知识点的全面认识,并且为初学者提供一个系统学习Android开发的指南。
通过学习本文内容,读者可以了解Android应用的组成部分、各种组件之间的通信机制、Activity生命周期管理、用户界面开发技巧、数据存储与持久化方式、网络通信操作等关键知识。
同时,我们将分享一些实际开发经验和技巧,让读者在实践中更加灵活自如地应用所学知识。
总而言之,这篇文章旨在帮助读者打下扎实的Android开发基础,为进一步深入学习和探索Android应用开发提供必要支持。
无论你是刚开始接触Android 开发还是已经有一定经验并且想要巩固和提升自己的技能,本文都将为你提供有价值的信息和参考资料。
android开发教材----22.数据存储(1)
4.TEXT:字符串文本。
5.BLOB:二进制对象。
Demo
CREATE TABLE table ( a VARCHAR(10), b NVARCHAR(15), c TEXT,
d INTEGER,
e FLOAT,
f BOOLEAN,
g Cபைடு நூலகம்OB,
h BLOB,
i TIMESTAMP,
j NUMERIC(10,5),
k VARYING CHARACTER (24),
l NATIONAL VARYING CHARACTER(16)
);
基本SQL命令
create insert update select
delete
order by group by having limit
什么是SQLite
SQLite数据类型
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数 据类型,会根据存入值自动判断。SQLite具有以下五种数据类 型: 1.NULL:空值。
2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。
3.REAL:浮点数字,存储为8-byte IEEE浮点数。
第二十二课:数据存储(1)
Android数据存储方式
1.SQLite数据库 2.文件 3.Shared Preferences 4.内容提供者(Content Providers) 5.网络
SQLite,是一款轻型的数据库,它的设计目标是嵌入式的,而且目 前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在 嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程 序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口, 同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管 理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版 本诞生于2000年5月. 至今已经有11个年头,SQLite也迎来了一 个版本 SQLite 3已经发布。 /view/19310.htm
《Android移动应用开发》Android文件存储
1 文件及存分类
内部存储与外部存储
外部存储
它并非始终可用,因为用户可采用 USB 存储的形式装载外部存储,并在某些情况下会从设备中 将其删除。
它是全局可读的,因此此处保存的文件可能不受控制地被读取。 当用户卸载应用时,只有在通过 getExternalFilesDir() 将应用的文件保存在目录中时,系统才
2 文件存取处理
SD卡文件
检查SD卡是否挂载
2 文件存取处理
SD卡文件
读取文件
2 文件存取处理
SD卡文件
写入文件
10
文件存储
2023/8/24
目录
1 文件及存储分类
CONTENT 2 文件存取处理
2023/8/24
参考教材:《Android应用开发项目化教程》
1 文件及存储分类
内部存储与外部存储
内部存储
它始终可用。 默认情况下只有自身应用可以访问此处保存的文件。 当用户卸载应用时,系统会从内部存储中删除应用的所有文件。
和Assets中的文件一样,会被原封不动的拷贝到APK中。
2 文件存取处理
原始文件
读取
使用openRawResource()方法并传递一个资源ID为R.raw.<filename>的参数打开原始文件 。该方法返回一个可以用来读取文件的InputStream对象。
2 文件存取处理
SD卡文件
获取权限
Assets文件
存储位置
project/assets/
存放在Assets目录中的文件会被原封不动的拷贝到APK中,而不会像其它资源文件那样被 编译成二进制的形式。
android高级编程 知识点
android高级编程知识点
Android高级编程涉及的知识点广泛,包括但不限于以下几个方面:
1. 性能优化:提高应用的运行效率,包括布局优化、内存管理、线程处理等。
2. 自定义视图和组件:创建自定义的视图和组件,包括自定义属性、样式、布局等。
3. 数据存储:使用不同的存储方式,如SharedPreferences、SQLite数据库、文件存储等。
4. 跨平台开发:使用跨平台技术,如React Native、Flutter等,实现一次编写多平台运行。
5. 高级UI设计:掌握Material Design、ConstraintLayout等高级UI设
计技术,实现美观的界面效果。
6. 网络编程:使用Retrofit、Volley等网络库进行网络请求和数据解析。
7. 安全性:了解常见的安全漏洞和攻击方式,如SQL注入、跨站脚本攻击等,并采取相应的防范措施。
8. 测试和调试:使用单元测试、集成测试和调试工具,确保应用的稳定性和可靠性。
9. 发布和管理:了解如何在Google Play商店发布和管理应用,以及如何
进行版本控制和持续集成。
10. 插件化开发:实现插件化应用,提高应用的模块化和可维护性。
以上知识点只是其中的一部分,掌握这些知识点可以帮助开发者更好地进行Android高级编程。
同时,不断学习和探索新技术也是非常重要的。
android开发培训私有文件资源文件的存取
android开发培训私有文件资源文件的存取一、私有文件夹下的文件存取(/data/data/包名)Java代码1importjava.io.FileInputStream;2importjava.io.FileOutputStream;3importorg.apache.http.util.EncodingUtils;45publicvoidwriteFileData(StringfileName,Stringmessage){6try{7FileOutputStreamfout=openFileOutput(fileName,MODE_PRIV ATE);8byte[]bytes=message.getBytes();9fout.write(bytes);10fout.close();11}12catch(Exceptione){13 e.printStackTrace();14}15}161718publicStringreadFileData(StringfileName){19Stringres="";20try{21FileInputStreamfin=openFileInput(fileName);22intlength=fin.available();23byte[]buffer=newbyte[length];24fin.read(buffer);25res=EncodingUtils.getString(buffer,"UTF-8");26fin.close();27}28catch(Exceptione){29 e.printStackTrace();30}31returnres;32}二、从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写)Java代码1.publicStringgetFromRaw(StringfileName){2.Stringres="";3.try{4.InputStreamin=getResources().openRawResource(R.raw.test1);5.intlength=in.available();6.byte[]buffer=newbyte[length];7.in.read(buffer);8.res=EncodingUtils.getString(buffer,"UTF-8");9.in.close();10.}11.catch(Exceptione){12. e.printStackTrace();13.}14.returnres;15.}三、从asset中获取文件并读取数据(资源文件只能读不能写)Java代码1.publicStringgetFromAsset(StringfileName){2.Stringres="";3.try{4.InputStreamin=getResources().getAssets().open(fileName);5.intlength=in.available();6.byte[]buffer=newbyte[length];7.in.read(buffer);8.res=EncodingUtils.getString(buffer,"UTF-8");9.}10.catch(Exceptione){11.e.printStackTrace();12.}13.returnres;14.}。
文件的存储(android)
Android--文件保存与读取文章分类:移动开发作者注:由于我在测试这个功能的时候发现文件名无法使用中文(sdk2.2 + 模拟器),如果有哪为高手无意中浏览此文章后,能对这个问题予以指点,我将感激不尽。
呵呵。
********************注:在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cacheJava代码1.2.1. 编写文件读取与写入功能实现类 FileService3.4. package cn.android.service;5.6. import java.io.ByteArrayOutputStream;7. import java.io.FileInputStream;8. import java.io.FileOutputStream;9.10. import android.content.Context;11. import android.util.Log;12.13. /**14. * 文件保存与读取功能实现类15. * @author Administrator16. *17. * 2010-6-28 下午08:15:1818. */19. public class FileService {20.21. public static final String TAG = "FileService";22. private Context context;23.24. //得到传入的上下文对象的引用25. public FileService(Context context) {26. this.context = context;27. }28.29. /**30. * 保存文件31. *32. * @param fileName 文件名33. * @param content 文件内容34. * @throws Exception35. */36. public void save(String fileName, String content) throws Exception {37.38. // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀39. if (!fileName.endsWith(".txt")) {40. fileName = fileName + ".txt";41. }42.43. byte[] buf = fileName.getBytes("iso8859-1");44.45. Log.e(TAG, new String(buf,"utf-8"));46.47. fileName = new String(buf,"utf-8");48.49. Log.e(TAG, fileName);50.51. // Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
封面文件存取编程基础文件◆文件可以用来存储比使用引用更大数量的数据◆Android提供方法来读、写文件◆只有本地文件可以被访问◆优点:可以存储大容量的数据◆缺点:文件更新或是格式改变可能会导致巨大的编程工作文件操作读文件Context.openFileInput(String name)打开一个与应用程序联系的私有文件输入流当文件不存在时抛出FileNotFoundException异常FileInputStream in = this.openFileInput("test2.txt");//打开文件"test2.txt"……in.close();//关闭输入流写文件Context.openFileOutput(String name,int mode)开启一个与应用程序联系的私有文件输出流当文件不存在时该文件将被创建文件输出流可以在添加模式中打开,这意味新的数据将被添加到文件的末尾FileOutputStream out = this.openFileOutput("test2.txt",MODE_APPEND);//打开文件"test2.txt"进行写操作、使用MODE_APPEND在添加模式中打开文件……out.close();//关闭输出流读取静态文件要打开打包在应用程序中的静态文件,使用Resources.openRawResource(R.raw.mydatafile) 该文件必须放在文件夹res/raw/中InputStreamin = this.getResources().openRawResource(R.raw.my);… //获得Context资源in.close();//关闭输入流文件存取示例创建添加文件内容并保存,打开文件并显示内容①新建工程FileWriteRead②修改main.xml布局,添加一个EditText、一个Button<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><EditTextandroid:id="@+id/EditText_Txt"android:layout_height="350px"android:layout_width="fill_parent"></EditText><Buttonandroid:layout_height="wrap_content"android:id="@+id/Button_Save"android:text="保存"android:layout_width="80px"></Button></LinearLayout>③在res/layout中新建一个open.xml布局文件,添加一个TextView、两个Button("打开","清空") <?xml version="1.0"encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/openlayout"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"><TextViewandroid:id="@+id/TextView_showTxt"android:layout_width="314px"android:layout_height="373px"android:layout_x="3px"android:layout_y="3px"></TextView><Buttonandroid:id="@+id/Button_openTxt"android:layout_width="80px"android:layout_height="wrap_content"android:text="打开"android:layout_x="2px"android:layout_y="378px"></Button><Buttonandroid:id="@+id/Button_clean"android:layout_width="80px"android:layout_height="wrap_content"android:text="清空"android:layout_x="239px"android:layout_y="378px"></Button></AbsoluteLayout>④文件存储/*定义IO对象*/private String Text_of_input;private OutputStream os;Text_of_input = inputArt.getText().toString();//得到用户输入字符try {os = this.openFileOutput("txtME", MODE_PRIVATE);//打开一个文件输出流。
名称为txtME,模式为不覆盖os.write(Text_of_input.getBytes());//把内容写入文件} catch (FileNotFoundException e) {// TODO Auto-generated catch block} catch (IOException e) {// TODO Auto-generated catch block} finally {try {//关闭文件输出流os.close();} catch (IOException e) {// TODO Auto-generated catch block}}⑤文件读取/*定义IO对象*/private String Text_of_output;private InputStream is;private byte[] b;try {//打开一个文件输入流。
名称为txtMEis = this.openFileInput("txtME");//字节数组声明定义b = new byte[1024];//读取文件内容放入字节数组int length = is.read(b);//把字节数组转换成字符串Text_of_output = new String(b);//显示读取内容长度setTitle("文件字数:" + length);//显示读取的文件内容showmyText.setText(Text_of_output);} catch (FileNotFoundException e) {// TODO Auto-generated catch block} catch (IOException e) {// TODO Auto-generated catch block}finally {try {//关闭文件输入流is.close();} catch (IOException e) {// TODO Auto-generated catch block}}⑥修改mianActivity.java文件,添加menu菜单与操作package zyf.FileWrite;/*导入要使用的包*/import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class FileWrite extends Activity implements Button.OnClickListener { /**Called when the activity is first created.*//*要使用的对象、变量声明*//*保存部分*/private EditText inputArt;/*编辑框,输入用户字符串*/private Button saveButton;/*按钮,保存*/private String Text_of_input;/*字符串,用户输入的字符串*/private OutputStream os;/*文件输出流,保存文件流*//*读取部分*/private TextView showmyText;/*TextView,显示读取文件内容*/private Button openTxt,cleanTxt;/*按钮,打开文件*/private String Text_of_output;/*字符串,从文件中读取到得字符串*/private InputStream is;/*文件输入流,读取文件流*/private byte[] b;/*字节数组,用来读取文件内容*/@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setLayoutShow(yout.main);/*设置主屏布局*/UIinit("main");/*初始化UI元素方法*/Logic("main");/*添加事件逻辑方法*/}/*设置主屏*/private void setLayoutShow(int layoutID) {// TODO Auto-generated method stubsetContentView(layoutID);/*设置当前主屏布局*/}private void UIinit(String mainROopen) {/*初始化UI*/if (mainROopen.equals("main")) {inputArt = (EditText) findViewById(R.id.EditText_Txt);saveButton = (Button) findViewById(R.id.Button_Save);} else if (mainROopen.equals("open")) {showmyText = (TextView) findViewById(R.id.TextView_showTxt);openTxt = (Button) findViewById(R.id.Button_openTxt);cleanTxt=(Button)findViewById(R.id.Button_clean);}}private void Logic(String string) {// TODO Auto-generated method stub/*为按钮添加事件处理*/if (string.equals("main")) {saveButton.setOnClickListener(this);} else if (string.equals("open")) {openTxt.setOnClickListener(this);cleanTxt.setOnClickListener(this);}}@Overridepublic void onClick(View v) {/*根据ID判断按钮事件*/switch (v.getId()) {case R.id.Button_Save: {/*提示*/NoteDebug("文件保存");// TODO Auto-generated method stub/*获得用户输入的字符串*/Text_of_input = inputArt.getText().toString();try {/*打开文件输出流,名称txtME,以不覆盖模式打开*/os = this.openFileOutput("txtME", MODE_PRIVATE);/*把字符串转换成字节数组,写入文件中*/os.write(Text_of_input.getBytes());} catch (FileNotFoundException e) {/*文件未找到,异常*/// TODO Auto-generated catch blockNoteDebug("文件关闭失败" + e);} catch (IOException e) {/*文件写入错误*/// TODO Auto-generated catch blockNoteDebug("文件写入失败" + e);} finally {try {/*关闭文件输出流*/os.close();} catch (IOException e) {// TODO Auto-generated catch blockNoteDebug("文件关闭失败" + e);}}/*输入框清空*/inputArt.setText("");}break;case R.id.Button_openTxt: {NoteDebug("文件打开");try {/*打开文件输入流,名称txtME*/is = this.openFileInput("txtME");/*初始化字节数组*/b = new byte[1024];/*从文件输入流中读取内容到字节数组中,返回内容长度*/int length = is.read(b);/*把字节数组转换成字符串*/Text_of_output = new String(b);/*设置标题,显示文件内容长度*/setTitle("文件字数:" + length);/*显示文件内容*/showmyText.setText(Text_of_output);} catch (FileNotFoundException e) {/*文件未找到,异常*/// TODO Auto-generated catch blockNoteDebug("文件打开失败" + e);} catch (IOException e) {/*文件读取错误,异常*/// TODO Auto-generated catch blockNoteDebug("文件读取失败" + e);}finally {try {/*关闭文件输入流*/is.close();} catch (IOException e) {// TODO Auto-generated catch blockNoteDebug( "文件关闭失败"+e);}}}break;case R.id.Button_clean:{/*清空*/showmyText.setText("");NoteDebug("清空");}break;default:break;}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stub/*添加三个菜单项目,并设置图片*/menu.add(0, 1, 1, "Edit").setIcon(R.drawable.ic_menu_edit);menu.add(0, 2, 2, "Open").setIcon(R.drawable.ic_menu_agenda);menu.add(0, 3, 3, "Exit").setIcon(R.drawable.ic_lock_power_off);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()) {case 1:/*显示main.xml为主屏布局*/setLayoutShow(yout.main);UIinit("main");Logic("main");NoteDebug("编辑文件Layout");break;case 2:/*显示open.xml为主屏布局*/setLayoutShow(yout.open);UIinit("open");Logic("open");NoteDebug( "打开文件Layout");break;case 3:/*退出*/finish();NoteDebug( "Byebye");break;default:break;}return super.onOptionsItemSelected(item);}private void NoteDebug(String showString){/*显示Toast提示*/Toast.makeText(this,showString, Toast.LENGTH_SHORT).show();}}⑦结果数据库编程基础SQLite数据库●在某些情况下,文件不是有效的如果多线程数据访问是相关的如果应用程序处理可能变化的复杂数据结构等等●因此,Android带来了内置SQLite数据库支持●数据库对于创建它们的包套件是私有的●数据库不应该用来存贮文件●提示:在SDK中的samples/NotePad下可以找到关于如何使用数据库的例子●SQLite是一个轻量级的软件库●实现了一个完全适应严峻环境的数据库原子量性坚固性独立性耐久性●体积大小只用几千字节●一些SQL的指令只是部分支持,例如:ALTER、TABLE●参阅获取更多信息创建数据库Context.createDatabase(String name,int version ,int mode,CursorFactory factory)创建一个新的数据库并返回一个SQLiteDatabase对象假如数据库不能被创建,则抛出FileNotFoundException异常新创建SQLite数据库方法SQLiteDatabase mydataBase=SQLiteDatabase.create(new CursorFactory(){ //创建一个数据库//工厂类,一个可选工厂类,当查询时调用来实例化一个光标@Overridepublic Cursor newCursor(SQLiteDatabase db,SQLiteCursorDriver masterQuery, String editTable,SQLiteQuery query) {// TODO Auto-generated method stubreturn null;}});SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",MODE_PRIVATE, new CursorFactory(){ //创建新的数据库,名称myDatabase,模式MODE_PRIVATE,鼠标工厂//工厂类,一个可选工厂类,当查询时调用来实例化一个光标@Overridepublic Cursor newCursor(SQLiteDatabase db,SQLiteCursorDriver masterQuery, String editTable,SQLiteQuery query) {// TODO Auto-generated method stubreturn null;}});删除数据库Context.deleteDatabase(String name)删除指定名称的数据库假如数据库成功删除则返回true,失败则为false(例如数据库不存在)//删除指定名称的数据库this.deleteDatabase("myDatabase.db");打开数据库Context.openDatabase(String file,CursorFactory factory)打开一个存在的数据库并返回一个SQLiteDatabase对象如果数据库不存在则抛出FileNotFoundException异常//创建一个名为:myDataBase的数据库,后缀为.dbSQLiteDatabase my_DataBase=this.openOrCreateDatabase("myDateBase.db",MODE_PRIVATE, null); my_DataBase.close();//不要忘记关闭数据库非查询SQL指令SQLiteDatabase.execSQL(String sql)可以用来执行非查询SQL指令,这些指令没有结果包括:CREATE TABLE / DROP TABLE / INSERT 等等例如:①创建一个名为"test"并带两个参数的表//创建一个名为"test"并带两个参数的表my_DataBase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY,someNumber INTERGER);");②在数据库中插入一个元组//在数据库中插入一个元组my_DataBase.execSQL("INSERT INTO test (_id,someNumber) values(1,8);");③删除表//删除表my_DataBase.execSQL("DROP TABLE test");查询SQL指令-游标CursorsAndroid 使用游标(Cursors)来导航浏览查询结果游标(Cursors)被android.database.Cursor对象来描述一个游标(Cursors)是一个简单的指针,它从查询结果的一个元组跳到下一个元组(或是前一个或是第一个或是……)游标(Cursors)在它定位位置的那一刻返回元组数据表test_id someNumber1 82 103 2//为了创建一个Cursor(游标),必须执行一个查询,要么通过SQL使用rawQuery()方法//或是更精心设计的方法,像query()方法Cursor cur=my_DataBase.rawQuery("SELECT * FORM test", null);if(cur!=null){//游标不为空//返回给定名称的列的基于0开始的index,如果该属性列不存在则返回-1//通过它们的index来检索属性值int numColumn=cur.getColumnIndex("someNumber");if(cur.moveToFirst()){//cur.moveToFirst()让游标指向第一行,如果游标指向第一行,则返回truedo {int num=cur.getInt(numColumn);//获得当前行该属性的值/*Cursor提供了不同的方法来回索不同的数据类型例如getInt(int index)/getString(int index)等等*//*做一些事情*/} while (cur.moveToNext());/*游标移动到下一行,如果游标已经通过了结果集中的最后,即没有行可以移动时,则返回false*///其他可能移动的是 previous() 和first()方法}}封面。