一、前言
实际项目,我们通常项目进行拆分,分成不同Model,方便其他项目调用,本文对实际操作进行进行说明。
API : API Version 12 Beta5
Dev : 5.0.3.700
二、详细说明
- 项目右键New-Model,选择Shared Library,命名为“common”(叫啥都行)。
- 在主App的引入新创建的common Lib。
3.在common中创建一个PreferencesUtil用户首选项工具类,类似于Android的Sp,并在common的Index中暴露这个工具类。
PreferencesUtil
import dataPreferences from '@ohos.data.preferences';
import preferences from '@ohos.data.preferences';
import { Log } from './Log';
import { ValueType } from '@kit.ArkData';
/**
* 用户首选项工具类
*/
export class PreferencesUtil {
static mPreferences ?: dataPreferences.Preferences
/**
* 初始化
* @param context
*/
static init(context: Context) {
try {
dataPreferences.getPreferences(context, 'Looper_Sp', (err, preferences) => {
if (err) {
Log.error(`Failed to get preferences. Code:${err.code},message:${err.message}`);
return;
}
PreferencesUtil.mPreferences = preferences
Log.info('Succeeded in getting preferences.');
// 进行相关数据操作
})
} catch (err) {
Log.error(`Failed to get preferences. Code:${err.code},message:${err.message}`);
}
}
/**
* 写数据
* @param isFlush 是否持久化
*/
static writeData(key: string, value: ValueType, isFlush: boolean): Promise<boolean> {
return new Promise((resolve, reject) => {
try {
PreferencesUtil.mPreferences?.put(key, value, (err) => {
if (err) {
Log.error(`Failed to put data. Code:${err.code}, message:${err.message}`);
reject(false);
return;
}
Log.info('Succeeded in putting data.');
if (isFlush) {
PreferencesUtil.flushData()
}
resolve(true);
})
} catch (err) {
Log.error(`Failed to check the key 'startup'. Code:${err.code}, message:${err.message}`);
reject(false);
}
});
}
/**
* 读取数据
*/
static readData<D>(key: string): Promise<D> {
return new Promise((resolve, reject) => {
if (PreferencesUtil.mPreferences == null) {
reject(new Error("mPreferences is null"));
} else {
PreferencesUtil.mPreferences.get(key, "", (err, value) => {
if (err) {
reject(err);
return;
}
resolve(value as D);
})
}
});
}
/**
* 删除数据
* @param isFlush 是否持久化
*/
static delData(key: string, isFlush: boolean): Promise<string> {
return new Promise((resolve, reject) => {
if (PreferencesUtil.mPreferences == null) {
reject(new Error("mPreferences is null"));
} else {
PreferencesUtil.mPreferences.delete(key, (err, value) => {
if (err) {
reject(err);
return;
}
if (isFlush) {
PreferencesUtil.flushData()
}
resolve("删除成功");
})
}
});
}
/**
* 删除整个库
* @param isFlush 是否持久化
*/
static delDB(context: Context, storeName: string): Promise<string> {
return new Promise((resolve, reject) => {
dataPreferences.deletePreferences(context, storeName, (err, value) => {
if (err) {
reject(err);
return;
}
resolve("删除成功");
})
});
}
/**
* 持久化
*/
static flushData() {
if (PreferencesUtil.mPreferences != null) {
try {
PreferencesUtil.mPreferences.flush((err) => {
if (err) {
Log.error(`Failed to flush. Code:${err.code}, message:${err.message}`);
return;
}
Log.info('Succeeded in flushing.');
})
} catch (err) {
Log.error(`Failed to flush. Code:${err.code}, message:${err.message}`);
}
}
}
}
let preferencesUtil = new PreferencesUtil()
export default preferencesUtil as PreferencesUtil
Index
export { PreferencesUtil } from './src/main/ets/utils/PreferencesUtil'
4.然后就能在主App中使用这个工具类,这个工具类需要在初始化的时候调用一下init方法。