From d8deacd04b03000da53c5c4afe8b6fdf5c279347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AA=9C=E7=A8=80=E4=B8=94=E4=B9=B1=E8=B9=A6?= <16379523+sst999@user.noreply.gitee.com> Date: Wed, 5 Nov 2025 06:47:20 +0000 Subject: [PATCH] update PageAndData04/04_StartingPoint/entry/src/main/ets/view/Home.ets. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 窜稀且乱蹦 <16379523+sst999@user.noreply.gitee.com> --- .../entry/src/main/ets/view/Home.ets | 81 ++++++++++++++++--- 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/PageAndData04/04_StartingPoint/entry/src/main/ets/view/Home.ets b/PageAndData04/04_StartingPoint/entry/src/main/ets/view/Home.ets index 02bd48d..c939061 100644 --- a/PageAndData04/04_StartingPoint/entry/src/main/ets/view/Home.ets +++ b/PageAndData04/04_StartingPoint/entry/src/main/ets/view/Home.ets @@ -14,6 +14,7 @@ */ import { common } from '@kit.AbilityKit'; +import { preferences } from '@kit.ArkData'; import mainViewModel from '../viewmodel/MainViewModel'; import ItemData from '../viewmodel/ItemData'; import ListInfo from '../viewmodel/ResponseData/ListInfo'; @@ -28,20 +29,80 @@ export default struct Home { @State httpGridItems: Array = []; @State pictureUri: string = ''; private swiperController: SwiperController = new SwiperController(); - private context = this.getUIContext().getHostContext() as common.UIAbilityContext; + private context = this.getUIContext().getHostHostContext() as common.UIAbilityContext; private applicationContext = this.context.getApplicationContext(); private cacheDir = this.applicationContext.filesDir; async aboutToAppear(): Promise { - // let httpUtil: HttpUtils = new HttpUtils(); - // this.httpGridItems = await httpUtil.postHttpRequest(); - // this.pictureUri = await httpUtil.getHttpRequest(this.cacheDir); - // httpUtil.destroyHttpRequest(); - - let rcpUtil: RCPUtils = new RCPUtils(); - this.httpGridItems = await rcpUtil.postRCPRequest(); - this.pictureUri = await rcpUtil.getRCPRequest(this.cacheDir); - rcpUtil.destroySession(); + // 先尝试从本地加载数据 + const hasLocalData = await this.loadDataFromLocal(); + + // 如果本地没有数据或数据过期,则从网络获取 + if (!hasLocalData || await this.isDataExpired()) { + console.info('Fetching fresh data from network'); + + let rcpUtil: RCPUtils = new RCPUtils(); + this.httpGridItems = await rcpUtil.postRCPRequest(); + this.pictureUri = await rcpUtil.getRCPRequest(this.cacheDir); + + // 保存新数据 + await this.saveDataToLocal(); + + rcpUtil.destroySession(); + } else { + console.info('Using cached data'); + } + } + + // 保存数据到Preferences + private async saveDataToLocal(): Promise { + try { + let prefs = await preferences.getPreferences(this.context, 'home_data'); + await prefs.put('httpGridItems', JSON.stringify(this.httpGridItems)); + await prefs.put('pictureUri', this.pictureUri); + await prefs.put('lastUpdateTime', Date.now().toString()); + await prefs.flush(); + console.info('Data saved successfully'); + } catch (err) { + console.error('Failed to save data: ' + err); + } + } + + // 从本地加载数据 + private async loadDataFromLocal(): Promise { + try { + let prefs = await preferences.getPreferences(this.context, 'home_data'); + let hasData = await prefs.has('httpGridItems'); + if (!hasData) { + return false; + } + + let gridItemsStr = await prefs.get('httpGridItems', ''); + if (gridItemsStr) { + this.httpGridItems = JSON.parse(gridItemsStr); + } + + this.pictureUri = await prefs.get('pictureUri', ''); + console.info('Data loaded from local storage'); + return true; + } catch (err) { + console.error('Failed to load data: ' + err); + return false; + } + } + + // 检查数据是否过期 + private async isDataExpired(): Promise { + try { + let prefs = await preferences.getPreferences(this.context, 'home_data'); + let lastUpdateTimeStr = await prefs.get('lastUpdateTime', '0'); + let lastUpdateTime = parseInt(lastUpdateTimeStr); + + const ONE_HOUR = 60 * 60 * 1000; + return (Date.now() - lastUpdateTime) > ONE_HOUR; + } catch (err) { + return true; + } } build() { -- Gitee