android笔记2
来源:互联网 发布:单片机继电器怎么使用 编辑:程序博客网 时间:2024/03/29 23:20
编辑 | 删除
2013_2_8_CZBK_12
数据的存储与访问
文件 io技术
参数
sqlite数据库
内容提供者
网络
创建一个android项目
文件操作
Ui---找到按钮 添加点击事件处理
把业务层写在业务类中。
FileService service = new FileService();
service.save(filename,content);
Toast.makeText(getApplicationContext(),T.string.success.1).show();
在业务类里面添加注释
酱紫 MainActivity这层的代码就完成了。
接下来 打开save方法,采用io技术实现文件的保存
首先得到文件的输出流对象 FileOutputStream outStream = content.openFileOutput(name,Context.。。。);
第一个参数文件名称,不要带路径
第二个参数用于指定文件的操作模式 文件有几种行为 以追加的方式、覆盖的方式写文件 另外文件还有访问权限的控制
如果希望创建出来的文件只能被本文件访问,并且覆盖 采用私有操作模式
outStream.write(getByte());
outStream.close();
数据时以2禁制写到文件中,所以要把字符串转换。。。。getByte()
android 上下文对象中提供了一个方法可以迅速的得到输出流对象
private Context context;
私有操作模式 创建出来的文件只能被本应用访问,其他应用无法访问该文件,另外采用私有模式创建的文件,写入文件中的内容会覆盖原文件内容
对外声明抛出意外,所以要捕获,但是不在方法中捕获,如果代码出现问题,希望王外抛出 最用例外会被抛给最外层,也就是使用(调用)了业务类的这一层 。例外抛给 activity ,由activity给用户提示保存失败的显示
。
(打开了activity)
捕获这个例外 如果失败给用户添加一个保存失败的显示
应用产生的数据
data/data
默会保存在包底下
保存 出错 擦一下 logcat指一下 显示 16行 空指针 因为没有 最好通过构造器来给他复制 因为如果set给他赋值,有时候会忘记调用方法赋值 所以下面 我们生成一个构造器 使用
source --- Generate Costructor using fileds
回到activity 使用getApplicationContext()把上下文对象传进去
当我们采用
接下来我们 用到输入流
写一个方法
public String read(String filename) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStram();
FileInputStream inStream = context.openFileInput(filename);
byte{}buffer = new byte[1024];
int len =0;
inStream.raed();//假设读不完 把缓存区填满了,数据类型会返回。只要没读完 这个方法是不断调用的 如果读完 返回值是-1 否则是读进去的数据葛苏 所以做个判断 只要len不是-1就没有读完
return null;
}
往内存输出的输出流对象 ByteArrayOutputStream
把每次写的都读到内存中,然后再从内存中得到数据
outStream.write();
然后 byte data = outStream.toByteArray(); 从内存中获取数据
return new String (data);
输入流---read()--->buffer字节数组----往内存输出的输出流对象ByteArrayOutputStream的write()方法---->内存--内存输出流对象的toByteArray()方法--->到新数组data中
之所以这么做 是为了 把输入流分步读到内存中,然后一下子输出来
调用read方法 把数据从输入流中读到字节数组中,(返回值是当前读到的数组长度,当读完时返回值是-1)
然后把每次读的数据得到,每次会把读到的数据填到buffer数组中,也就是说第二次得到的数据会把第一次得到的数据替换掉,所以每次都要把得到的数据存起来。————可以使用一个往内存输出的输出流对象
ByteArrayOutputStream,也就是说每次把得到的数据写入内存中,然后从内存中得到所有的数据
buufer 把数据中的数据写到内存中
offset 数组什么范围的数据写到内存中 0
然后从内存中得到存放在内存中的所有数据 byte data =outStream.toByteArray();
目前得到的数据,实际上是save方法里那个outStream.write(content.getByte());语句中 getByte()所得到的数据,也就是说他们的数据时一致的。那么反过来,我们要得到String ,所以new String(data);
输入 /**回车 然后可以输入备注
然后对它进行单元测试
首先,引入单元测试的环境 即把安卓单元测试依赖库(相当于引入类库)引入进来
在application节点中添加 <uses-library android:name="android.test.runner">
然后再在mainfest里添加
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.itcast.junit"android:label="Test for my app"/>
然后修改一下 targetPackage
接下来 创建单元测试用例 新建一个class 把它放在test包里,让它进程AndroidTestCase这个类,然后再写测试方法 ,然后把被测试类的对象给它new出来 然后取得上下文对象
private static final String TAG = "FileServiceTest";
public void testRead() throws Throwable{
FileService service = new FileService(this.getContext);
String result = service.read("itcast.txt");
Log.i(TAG,result);
}
添加日志过滤器
/**
*关于上下文的理解
*/
最简单的理解:
一个APK进程只有一个Context: 这个Context就是ApplicationContext,从Context继承过来。
ApplicationContext可以看做是针对整个系统的全局处理接口,因为:
它负责和系统服务打交道
RPC通信由他通过那些XXXServiceManager和XXXService来处理。
其他一些模块,比如Activity……
关于上下文的百度解释
android开发中的几种上下文有什么区别,他们是否相同
2012-11-16 10:54提问者: wbdwsqwwn |浏览次数:127次
比如context Activity.this , getApplicationContext 这几种上下文分别的用法.还有为什么在new ProgressDialog(Context context)的时候,传的上下文不能用getApplicationContext ,运行时会报异常,传this或者
Activity.this就可以.
满意回答
2012-11-16 11:08
context出现通常作为一个类。而Activity.this是作为一个具体的对象。并且context一般是作为参数传递的。Activity.this就是context的一个具体。就好比说,动物和狗的关系。而getApplicationContext 看名字也知道了
,是得到整个应用的context。你现在在一个具体的activity中传他,代码怎么怎么知道你想在哪个activity中创建dialog啊。这不是为难它吗?
追问
那每个activity的上下文和getApplicationContext是不是一个上下文,一个应用中有几个上下文,谢谢
回答
每个activity都有自己的上下文啊。一个应用就只能有一个上下文啦。
Context字面意思是上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄。很多方法需要通过 Context才能识别调用者的实例:比如说Toast的第一个参数就是
Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为
实现Context的类主要有Android特有的几个模型,Activity以及Service。
Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型。同时启动应用级的操作,如启动Activity,broadcasting和接收intents。
不过我看过的最简单的理解:
一个APK进程只有一个Context: 这个Context就是ApplicationContext,从Context继承过来。
ApplicationContext可以看做是针对整个系统的全局处理接口,因为:
它负责和系统服务打交道
RPC通信由他通过那些XXXServiceManager和XXXService来处理。
其他一些模块,比如Activity……
- android学习笔记2
- android 笔记2
- android学习笔记2
- 【Android笔记】(2)ButtonClickPic
- android 学习笔记-2
- android学习笔记(2)
- android 学习笔记2
- Android 笔记2
- Android学习笔记2
- Android学习笔记2
- android学习笔记2
- android 学习笔记2
- android笔记2
- Android 笔记2
- Android笔记(2)
- Android 学习笔记2
- Android学习笔记2
- Android笔记2
- 一种高效可伸缩的缓存设计方法
- 教务系统开发总结
- Struts2入门到精通十三——————总结
- 设计模式—外观模式
- python是在Prototype模式和Singleton模式
- android笔记2
- Java--二进制正负表示
- 手把手教你玩转SOCKET模型之重叠I/O篇(上)
- 点结构体于枚举
- 读取数据到结构体数组
- 未完,待续
- oracle之-存储结构
- SQL 笔记
- UIImageView响应点击事件