HarmonyOS NEXT 中级开发笔记:基于HarmonyOS Design的壁纸应用数据库实践

53 阅读2分钟

今天在适配最美壁纸应用到HarmonyOS NEXT时,重点解决了数据库模块的设计问题。HarmonyOS Design强调简洁高效的数据管理,这对壁纸类应用尤为重要。以下是一些关键实现点:

1. 数据库表设计遵循HarmonyOS Design的"极简"原则,只保留必要字段:

typescript

 

// 壁纸信息表结构

interface WallpaperSchema {

  id: number;          // 主键

  name: string;        // 壁纸名称

  category: string;    // 分类

  uri: string;         // 资源路径

  isPremium: boolean;  // 是否付费

  createTime: number;  // 创建时间戳

}

2. 使用HarmonyOS的RDB关系型数据库API(API12兼容版本):

typescript

 

import relationalStore from '@ohos.data.relationalStore';

 

// 初始化数据库

async function initDatabase() {

  const config = {

    name: 'WallpaperDB.db',

    securityLevel: relationalStore.SecurityLevel.S1

  };

  

  try {

    const db = await relationalStore.getRdbStore(this.context, config);

    await db.executeSql('CREATE TABLE IF NOT EXISTS wallpaper (id INTEGER PRIMARY KEY, name TEXT, category TEXT, uri TEXT, isPremium INTEGER, createTime INTEGER)');

    return db;

  } catch (err) {

    console.error(Failed to init database. Code:${err.code}, message:${err.message});

  }

}

3. 实现壁纸收藏功能时,注意遵循HarmonyOS Design的交互反馈原则:

typescript

 

// 添加收藏

async function addFavorite(wallpaper: WallpaperSchema) {

  const db = await initDatabase();

  const valueBucket = {

    'id': wallpaper.id,

    'name': wallpaper.name,

    'category': wallpaper.category,

    'uri': wallpaper.uri,

    'isPremium': wallpaper.isPremium ? 1 : 0,

    'createTime': new Date().getTime()

  };

  

  try {

    await db.insert('wallpaper', valueBucket);

    // 根据HarmonyOS Design规范,成功操作后应有轻微触感反馈

    vibrator.vibrate(100);

  } catch (err) {

    console.error(Failed to add favorite. Code:${err.code}, message:${err.message});

  }

}

4. 分页查询实现,符合HarmonyOS Design的流畅体验要求:

typescript

 

// 获取壁纸列表

async function getWallpapers(page: number, pageSize: number): Promise<WallpaperSchema[]> {

  const db = await initDatabase();

  const offset = (page - 1) * pageSize;

  

  try {

    const resultSet = await db.query('SELECT * FROM wallpaper ORDER BY createTime DESC LIMIT ? OFFSET ?', [pageSize, offset]);

    return resultSet.getAllObjects() as WallpaperSchema[];

  } catch (err) {

    console.error(Failed to query wallpapers. Code:${err.code}, message:${err.message});

    return [];

  }

}

遇到的问题:在实现分类筛选时,发现直接使用LIKE查询性能不佳。参考HarmonyOS Design的性能优化建议,改为预置分类标签并建立索引后,查询效率显著提升。

下一步计划:研究HarmonyOS的分布式数据管理,实现壁纸收藏在多设备间的自动同步,这需要更深入学习HarmonyOS Design的跨设备交互规范。