赞
踩
共享参数的用法
SharedPreferences是Android的一个轻量级存储工具,采用的存储结构是Key-Value的
键值对方式。
共享参数的存储介质是符合XML规范的配置文件。保存路径是:/data/data/应用包名/shared_prefs/文件名.xml
类似于java中的*.properties的配置文件
共享参数的使用场景
共享参数主要适用于如下场合:
简单且孤立的数据。若是复杂且相互间有关的数据,则要保存在数据库中。
文本形式的数据。若是二进制数据,则要保存在文件中。
需要持久化存储的数据。在App退出后再次启动时,之前保存的数据仍然有效。
实际开发中,共享参数经常存储的数据有App的个性化配置信息、用户使用App的行为信
息、临时需要保存的片段信息等。
程序闪退,保存到内存中的信息是没有的。
- //data目录下,创建一个config.xml的文件
- SharedPreferences config = getSharedPreferences("config", Context.MODE_PRIVATE);
- SharedPreferences.Editor edit = config.edit();
- edit.putString("hello","world");
- edit.commit();
-
- String hello = config.getString("hello","");
- <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
- <map>
- <string name="hello">world</string>
- </map>
sQLiteDatabase是SQLiteH0B法有3类:
管理类,用于数据库层面的操作。
openDatabase:打开指定路径的数据库。
isOpen:判断数据库是否已打开。
close:关闭数据库。
getVersion:获取数据库的版本号。
setVersion:设置数据库的版本号。
-
- SQLiteDatabase sqLiteDatabase = openOrCreateDatabase(getFilesDir() + "/test.db", Context.MODE_PRIVATE, null);
- String path = sqLiteDatabase.getPath();
- Toast.makeText(this,"path的值=="+path, Toast.LENGTH_SHORT).show();
-
- // deleteDatabase(getFilesDir() + "/test.db");
数据库管理器SQLiteDatabase
事务类,用于事务层面的操作。
beginTransaction:开始事务。
setTransactionSuccessful:设置事务的成功标志。
endTransaction:结束事务。
数据处理类,用于数据表层面的操作。
execSQL:执行拼接好的SQL控制语句。
delete:删除符合条件的记录。
update:更新符合条件的记录。
insert:插入一条记录。
query:执行查询操作,返回结果集的游标。
rawQuery:执行拼接好的SQL查询语句,返回结果集的游标。
公共区域:
1、所有应用都可以访问的公用区域
2、仅有A应用访问的私有空间区域
3、仅有B应用访问的私有空间区域
- package com.pshdhx.utils;
-
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
-
- public class FileUtil {
- //把字符串保存到指定路径的文本文件
- public static void saveText(String path,String txt){
- BufferedWriter os = null;
- try{
- os = new BufferedWriter(new FileWriter(path));
- os.write(txt);
- }catch (Exception e){
- e.printStackTrace();
- }finally {
- if(os != null){
- try {
- os.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- //从指定路径的文本文件读取字符串
- public static String openTxt(String path){
- StringBuffer sb = new StringBuffer();
- BufferedReader br = null;
- try{
- br = new BufferedReader(new FileReader(path));
- String line = null;
- while ((line = br.readLine()) != null){
- sb.append(line);
- }
- }catch (Exception e){
- e.printStackTrace();
- }finally {
- if(br != null){
- try {
- br.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return sb.toString();
- }
- }
- //外部存储的私有空间
- String path1 = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();
- path1 = path1 + File.separatorChar + "myFileName.txt";
- FileUtil.saveText(path1,"hhhhhh哈哈哈");
-
- //外部存储的公共空间
- //注册清单文件开启读写权限
- String s = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> android:requestLegacyExternalStorage="true"
storage和SD卡的目录,其实就是一个映射。
将图片缓存到缓存里,不用每次读取图片都要从网络中获取。
Android 的位图工具是Bitmap,App读写Bitmap可以使用性能更好的
BufferedOutputStream和BufferedInputStream。
Android还提供了BitmapFactory工具用于读取各种来源的图片,相关方法如下:
decodeResource:该方法可从资源文件中读取图片信息。
decodeFile:该方法可将指定路径的图片读取到Bitmap对象。
decodeStream:该方法从输入流中读取位图数据。
将图片读取到外部存储里边保存,然后从保存的位置再读取到ImageView显示
- @Override
- public void onClick(View v) {
- switch (v.getId()){
- case R.id.save_pic:
- String fileName = System.currentTimeMillis()+".jpeg";
- path = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()+ File.pathSeparatorChar+fileName;
- System.out.println("path = " + path);
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dog);
- FileUtil.saveImage(path,bitmap);
- //ToastUtil.showMsg(this,"图片保存成功!");
- System.out.println("图片保存成功!");
- break;
- case R.id.read_pic:
- Bitmap bitmap1 = FileUtil.openImage(path);
- picShow.setImageBitmap(bitmap1);
-
- Bitmap bitmap2 = BitmapFactory.decodeFile(path);
- picShow.setImageBitmap(bitmap2);
-
- picShow.setImageURI(Uri.parse(path));
- break;
- }
-
- }
- public static void saveImage(String path, Bitmap bitmap) {
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(path);
- bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- }
-
- public static Bitmap openImage(String path) {
- Bitmap bitmap = null;
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(path);
- bitmap = BitmapFactory.decodeStream(fis);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (fis != null) {
- try {
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return bitmap;
- }
Application是android的一大组件,在App运行过程中有且仅有一个Application对象贯彻整个生命周期。
- package com.pshdhx.middleComponent;
-
- import android.app.Application;
- import android.content.res.Configuration;
-
- public class MyApplication extends Application {
-
- private static MyApplication mApp;
- public static MyApplication getInstance(){
- return mApp;
- }
-
- //App启动时,调用
- @Override
- public void onCreate() {
- mApp = this;
- super.onCreate();
- }
-
- //App终止时,调用--不给开发者使用
- @Override
- public void onTerminate() {
- super.onTerminate();
- }
-
- //在配置改变时,调用。比如说横屏变为竖屏【屏幕旋转时,会重新创建activity】
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- }
- }
接着下activity中,就可以使用application类中的map对象了,供所有的activity使用。
主要存取3类数据:
1、用户名、手机号
2、不方便由意图传递的数据。例如位图对象、非字符串类型的集合对象。
3、容易因频繁分配内存到导致内存泄露的对象,如Handler对象等。
实体类:
- @Dao
- public interface BookDao {
- @Insert
- void insert(Book... book);
-
- @Update
- void upd(Book... book);
-
- @Delete
- void del(Book... book);
-
- @Query("select * from book")
- List<Book> qry(Book... book);
-
- @Query("select * from book where name = :name order by id desc")
- List<Book> qryByName(String name);
- }
Application
- //App启动时,调用
- @Override
- public void onCreate() {
- mApp = this;
- super.onCreate();
- bookDataBase = Room.databaseBuilder(this,BookDataBase.class,"book")
- //允许迁移数据库【如果没有添加,发生数据库变更时,Room默认会删除原数据库再创建新数据库,如此原来的数据会丢失】
- .addMigrations()
- //允许在主线程中操作数据库
- .allowMainThreadQueries()
- .build();
-
- }
-
-
-
- public BookDataBase getBookDataBase(){
- return bookDataBase;
- }
activity使用:
- bookDao = MyApplication.getInstance().getBookDataBase().bookDao();
-
- @Override
- public void onClick(View v) {
- String inputBookName = bookName.getText().toString();
- String inputBookAuthor = author.getText().toString();
- switch (v.getId()) {
- case R.id.book_add:
- Book b1 = new Book();
- b1.setName(inputBookName);
- b1.setAuthor(inputBookAuthor);
- bookDao.insert(b1);
- break;
-
- }
- }
- @Database(entities = {Book.class},version = 1,exportSchema = true)
- public abstract class BookDataBase extends RoomDatabase {
-
- public abstract BookDao bookDao();
- }
1、Jetpack
MVC MVP MVVM
androidx
Jetpack组成
2、LifeCycle
LifeCycle解耦页面和组件
LifeCycleService解耦service和组件
ProcessLifecycleOwner监听程序与生命周期
3、ViewModel
作用与应用
生命周期特性
AndroidViewModel
4、LiveData
应用与优势
ViewModel+liveData实现Fragment间通信
5、DataBinding
DataBinding意义与应用、ActivityMainBinding的由来
二级页面的绑定
自定义BindingAdapter加载网络图片与参数可选
双向绑定BaseOvservable与ObservableField
RecyclerView的绑定
DataBinding+ViewModel+LivaData整合
6、MVVM架构设计
MVVM架构与Jetpack
数据模型驱动界面更新
使用Jetpack组件构建MVVM应用程序
7、Room
Android官方的ORM库
Room+ViewModel+LiveData
使用Migration升级数据库
异常处理
Schema文件记录排查问题
销毁和重建策略
欲填充数据库
8、Navigation
9、WorkManager
10、Paging
11、Compose
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。