在Android初次的前期学习中的十二个小例子(附案例下载)
- 在res/layout/下新建activity_demo.xml
- 在manifests/文件夹下的AndroidManifest.xml注册(可使用Alt+Enter快捷方式)
- 新建DemoActivity继承Activity,并覆写onCreate(),在里面添加setContentView指向资源文件夹下的DemoActivity
- findViewById()找到View资源,设置监听。调用View对象的一个方法setOnClickListener,该方法的参数为OnClickListener,但是该方法是一个接口,需要重写方法onClick。
Intent intent = new Intent(MainActivity.this, DemoActivity.this);
startActivtiy(intent);
//打开百度网页
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.helloWorld1:
Log.i("textView1","helloWorld1");
break;
case R.id.helloWorld2:
Log.i("textView2","helloWorld2");
break;
}
}
- 新建Activity视图为activity_item.xml,进行页面布局并添加ListView
- 新建Activity的子类显示activity_item资源,并在manifests里面注册
- 新建ListAdpter继承BaseAdapter,并覆写主要的方法:getCount()和getView()
- 在ListAdpter添加List<String>对象,这是ListView的视图来源,在覆写getView()的方法时,使用LayoutInflater的inflater()方法将activity_item填充并可以设置TextView的文本。
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View view1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_item,viewGroup,false);
TextView textView = view1.findViewById(R.id.text);
textView.setText(mData.get(i));
return view1;
}
private void download() {
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.sendEmptyMessage(1);
}
};
Thread thread = new Thread(runnable);
thread.start();
}
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what == 1){
mBtDownload.setText(R.string.downloaded);
}
}
};
sharedPreferences = getSharedPreferences("count", Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
二、向空间中添加键值对:
editor.putInt("count",count);
editor.apply();
count = sharedPreferences.getInt("count",0);
- 写入文件,是从内存到文件,则是出去,即FileOutputStream
- 读取文件,是从文件到内容,则是进来,即FileInputSteam
- Context.MODE_PRIVATE 默认操作模式,私有数据(只能应用本身访问),写入文件会被覆盖
- Context.MODE_APPEND 检验文件是否存在,存在就追加内容,不存在就先新建文件再添加内容
- Context.WORLD_READABLE 可以被其他应用读取
- Context.WORLD_WRITABLE 可以被其他应用写入
- 既可读又可写:Context.WORLD_READABLE + Context.WORLD_WRITABLE
- 获取内存写入输出流fileOutputSteam,使用openFileOutput(fileName,mode)
- 字符串转换为字节数组,注意编码格式,默认getBytes()编码为UTF-8
- 写入,使用fileOutputSteam.write(),注意捕获异常
private void writeFile() {
FileOutputStream fileOutputStream = null;
try {
fileName = mEtName.getText().toString();
fileContext = mEtContent.getText().toString();
fileOutputStream = openFileOutput(fileName, MODE_APPEND); //1.获取内存输出流fileOutputSream
fileOutputStream.write(fileContext.getBytes()); //2.字符串转换为字节数组
Toast.makeText(this,"写入完成!",Toast.LENGTH_SHORT).show();
} catch (java.io.IOException e) {
e.printStackTrace();
Toast.makeText(this,"捕获IO异常!",Toast.LENGTH_SHORT).show();
} finally {
try {
if (fileOutputStream!=null)
fileOutputStream.close(); //无论捕获异常还是正常执行,都需要关闭fileOutputStream
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 获取内存输入流:使用openFileInput()方法
- 获得字节数组:定义字节数组用于暂时保存数据,使用fileInputStream.read(bytes)方法获取,返回值为字节数组的大小size。
- 获得字符串:使用new String(bytes)的方法将字节数组转换为字符串,注意编码格式,默认编码格式为UTF-8。在使用中需要用完整填充的字节数组,所以这里还需要新定义一个刚好为size的字节数组用于正确地转换为字符串。
private void readFile() {
FileInputStream fileInputStream = null;
try {
fileName = mEtName.getText().toString();
fileInputStream = openFileInput(fileName); //1.获取内存输入流
byte[] bytes = new byte[1024];
int size = fileInputStream.read(bytes); //2.读入字节数组
byte[] data = new byte[size];
System.arraycopy(bytes,0,data,0,size); //3.转换为字符串,注意编码格式
String str = new String(data);
textView.setText(str);
Toast.makeText(this,"读取完成!",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this,"文件没有找到!",Toast.LENGTH_SHORT).show();
} finally {
try {
if (fileInputStream != null)
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 内部存储与外部存储是相对于应用程序来说的,内部存储是应用程序私有的,可设置对可外访问。
- 内部存储主要用于存储应用的临时数据,空间十分有限,应用卸载时,该目录文件也被删除。
|
内部存储位置
|
存放数据类型
|
访问方法
|
|
data/data/包名/shared_prefs
|
SharedPreferences将数据持久化到xml文件存放的目录
|
|
|
data/data/包名/databases
|
数据库文件存放的目录
|
|
|
data/data/包名/files
|
普通数据存放的目录
|
context.getFilesDir()
|
|
data/data/包名/cache
|
缓存文件存放的目录
|
context.getCacheDir()
|
|
外部存储分类
|
外部存储详细目录
|
使用方法
|
|
公共目录
|
十大公共目录
|
Environment.getExternalStorageDirectory().getPath()
|
|
私有目录
|
storage/sbcard/Android/data/包名/files
|
getExternalFilesDir()
|
|
storage/sbcard/Android/data/包名/cache
|
getExternalCacheDir()
|
- 清除缓存:APP运行过程产生的临时数据,为内部存储文件。
- 清除数据:内部存储/data/user/0/packname/和外部存储/storage/emulated/0/Android/data/packname/下的文件里面的数据会全部删除,包括cache,files,lib,shared_prefs等等。
- /data目录下的文件物理上存放在我们通常所说的内部存储里面 ,一般用于临时数据,比如头像,密钥文件(隐私,空间有限)。
- /storage目录下的文件物理上存放在我们通常所说的外部存储里面 ,裁剪用于文件保存,上传头像(空间比较大)。
- /system用于存放系统文件,/cache用于存放一些缓存文件,物理上它们也是存放在内部存储里面的
|
描述
|
代码
|
|
获取内部存储的根路径
|
Environment.getDataDirectory() = /data
|
|
获取外部存储的根路径
|
Environment.getExternalStorageDirectory().getAbsolutePath() = /storage/emulated/0
|
|
系统的内部存储
|
Environment.getDownloadCacheDirectory() = /cache
|
|
Environment.getRootDirectory() = /system
|
- 彻底了解android中的内部存储与外部存储 https://www.cnblogs.com/jingmo0319/p/5586559.html
- 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑 https://blog.csdn.net/u010937230/article/details/73303034/
- Android存储扩展学习-----应用的清除数据和清除缓存 https://blog.csdn.net/oudetu/article/details/78664514
在Android初次的前期学习中的十二个小例子(附案例下载)的更多相关文章
- 在Android初次的前期学习中的二个小例子(2)
Hello13:SQLite数据库 一.简述SQLite的概念和主要特性 SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,使用非常方便,支持SQL语法标准和数据库事务原则. 相对于Sh ...
- salesforce 零基础学习(四十二)简单文件上传下载
项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...
- 我的MYSQL学习心得(十二) 触发器
我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...
- VSTO 学习笔记(十二)自定义公式与Ribbon
原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...
- 我的MYSQL学习心得(十二)
原文:我的MYSQL学习心得(十二) 我的MYSQL学习心得(十二) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYS ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...
- Linux学习总结(十二)—— CentOS用户管理:创建用户、修改用户、修改密码、密码有效期、禁用账户、解锁账户、删除用户、查看所有用户信息
文章首发于Linux学习总结(十二)-- CentOS用户管理,请尊重原创保留原文链接. 创建用户 useradd -g webadmin -d /home/zhangsan zhangsan pas ...
- 汇编入门学习笔记 (十二)—— int指令、port
疯狂的暑假学习之 汇编入门学习笔记 (十二)-- int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
随机推荐
- linux基础2-cd、mkdir、touch、umask、chattr、lsattr、SUID/SGID/Sticky Bit
一 cd : . 代表当前目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表[目前用户身份]所在的自家目录 与cd效果相同 ~account 代表 account 这个用户的自家家目录 二m ...
- 原生js制作播放器
以前 就想做一个播放器,一直没狠下心来,今天终于狠下心来,把这个做出来了(因为有点无聊) 做这个播放器 也百度了一下, 你叫我做,我肯定做不出来, 就算用jquery 我也做不出来. 以前也用过a ...
- Java通过JDBC连接SQL Server2017数据库
一.需要明白的基础知识 数据库名 驱动jar(x表示版本号) 具体驱动类 连接字符串(ip地址,端口号,名字) Oracle ojdbc-x.jar oracle.jdbc.oracleDriver ...
- Centos7 docker、harbor 安装配置
Docker 安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo wget ...
- UTC和GMT时间
来源:https://www.cnblogs.com/qiuyi21/archive/2008/03/04/1089456.html UTC和GMT时间 每个地区都有自己的本地时间,在网上以及无线电通 ...
- 《黑白团团队》第九次团队作业:Beta冲刺第三天
项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 团队项目Github仓库地址链接. 第一天 日期:2019/6/24 1.1 ...
- Gym - 102028H Can You Solve the Harder Problem? (后缀数组+RMQ+单调栈)
题意:求一个序列中本质不同的连续子序列的最大值之和. 由于要求“本质不同”,所以后缀数组就派上用场了,可以从小到大枚举每个后缀,对于每个sa[i],从sa[i]+ht[i]开始枚举(ht[0]=0), ...
- NotePad++ 使用 DBGp 调试php
1.使用phpinfo();查看php版本信息 2.配置xdebug 2.1 根据php版本信息,下载对应的xdebug . 2.2将下载的php_xdebug-2.1.2-5.3-vc6.dll文件 ...
- ao的mobile解决方案
http://aicdg.com/ue4-msaa-depth/ http://aicdg.com/vulkan-mass-shader-resolve/ ao两篇paper 分bake和realti ...
- UUID值
生成这种值:b28043c8-fdb7-4c9e-8df5-b869d38f829d