在HarmonyOS NEXT开发中求一个缓存demo验证?

在HarmonyOS NEXT开发中求一个缓存demo验证?

阅读 1.1k
1 个回答

参考代码:

import { promptAction } from '@kit.ArkUI'; 
import { preferences } from '@kit.ArkData'; 
 
let context = getContext(this); 
let preference: preferences.Preferences; 
let preferenceTemp: preferences.Preferences; 
 
// 对象类 
export class ImageModel { 
  constructor(id: string, tokenInfo: string, imgInfo: string, urlInfo: string) { 
    this.id = id 
    this.token = tokenInfo 
    this.img = imgInfo 
    this.url = urlInfo 
  } 
  id?: string = ''; 
  token: string = ''; 
  img: string = ''; 
  url: string = '' 
} 
 
// 首选项工具类 
class PreferenceModel { 
 
  // 初始化 
  async getPreferencesFromStorage() { 
    try { 
      preference = await preferences.getPreferences(context,'ImageUrlData.db'); 
    } catch (err) { 
      console.error('[PreferenceModel]', `Failed to get preferences, Cause: ${err}`); 
    } 
  } 
 
  // 删除首选项 
  async deletePreferences() { 
    try { 
      await preferences.deletePreferences(context, 'ImageUrlData.db'); 
    } catch(err) { 
      console.error('[PreferenceModel]', `Failed to delete preferences, Cause: ${err}`); 
    }; 
    preference = preferenceTemp; 
    this.showToastMessage('删除数据库成功'); 
  } 
 
  // 插入值 
  async putPreference(Image:string, ImageInfo: ImageModel) { 
    if (!preference) { 
      await this.getPreferencesFromStorage(); 
    } 
    try { 
      await preference.put(Image, JSON.stringify(ImageInfo)); 
    } catch (err) { 
      console.error('[PreferenceModel]', `Failed to put value, Cause: ${err}`); 
    } 
    await preference.flush(); 
  } 
 
  // 获取值 
  async getPreference(Image: string) { 
    let ImageInfo = ''; 
    if (!preference) { 
      await this.getPreferencesFromStorage(); 
    } 
    try { 
      ImageInfo = (await preference.get(Image, '')).toString(); 
    } catch (err) { 
      console.error('[PreferenceModel]', `Failed to get value, Cause: ${err}`); 
    } 
    if (ImageInfo === '') { 
      this.showToastMessage('数据为空,请先写入数据'); 
      return; 
    } 
    this.showToastMessage('写入数据成功'); 
    return JSON.parse(ImageInfo); 
  } 
 
  async getImageData(Image: string) { 
    return await this.getPreference(Image); 
  } 
 
  // 写入数据 
  writeData(Image:string, ImageInfo: ImageModel) { 
    this.putPreference(Image, ImageInfo); 
    this.showToastMessage('写入数据成功'); 
  } 
 
  showToastMessage(message: string) { 
    promptAction.showToast({ 
      message: message, 
      duration: 3000 
    }); 
  }; 
} 
 
/** 
 * 操作首选项 
 */ 
export class LocalDataManager { 
  preferenceModel = new PreferenceModel() 
  private static localDataManager: LocalDataManager; 
 
  private constructor() { 
    this.preferenceModel.getPreferencesFromStorage() 
  } 
 
  static instance() { 
    if (!LocalDataManager.localDataManager) { 
      LocalDataManager.localDataManager = new LocalDataManager(); 
    } 
    return LocalDataManager.localDataManager; 
  } 
 
  async queryImageInfo(Image:string) { 
    return await this.preferenceModel.getImageData(Image) 
  } 
 
  insertImageInfo(Image:string, ImageInfo: ImageModel) { 
    this.preferenceModel.writeData(Image, ImageInfo) 
    return Image.length 
  } 
 
  updateImageInfo(Image:string, ImageInfo: ImageModel) { 
    this.preferenceModel.writeData(Image, ImageInfo) 
    return Image.length 
  } 
 
  deleteImageInfo() { 
    this.preferenceModel.deletePreferences() 
  } 
} 
 
// 使用首选项做缓存 
@Entry 
@Component 
struct NeiMengGuNongJi { 
  private localDataManager: LocalDataManager = LocalDataManager.instance(); 
  @State token_Info: string = '' 
  private img: string = 'image00' 
  private url: string = 'url000' 
  @State num: number = 0 
  @State keyInfo: string = '' 
  @State imageData: ImageModel = new ImageModel('','','','') 
 
  build() { 
    Column() { 
      Button('点击存入数据库') 
        .fontSize(50) 
        .fontWeight(FontWeight.Bold) 
        .onClick(()=> { 
          for (let i = 1; i <= 10; i++) { 
            let tokenInfo  = "token00"+i 
            let image = this.img+i 
            let urlInfo = this.url+i 
            let ImageInfo = new ImageModel("", tokenInfo, image, urlInfo); 
            this.localDataManager.insertImageInfo(image, ImageInfo) 
          } 
        }) 
      TextInput({placeholder:'输入key值:例如image001'}) 
        .type(InputType.Normal) 
        .onChange((key: string) => { 
          this.keyInfo = key 
        }) 
      Button('通过key值:'+this.keyInfo+", 获取value值") 
        .fontSize(18) 
        .fontWeight(FontWeight.Bold) 
        .onClick(async()=> { 
          if(this.keyInfo !== ''){ 
            this.imageData = await this.localDataManager.queryImageInfo(this.keyInfo) as ImageModel 
            console.info("imageData="+JSON.stringify(this.imageData)) 
          } 
        }) 
      Text("key: "+this.keyInfo+", value: " + (this.imageData.token === ''? '' : JSON.stringify(this.imageData))).fontSize(40) 
    } 
    .width('100%') 
  } 
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题