麻花痒 发表于 2025-1-5 06:25:56

Harmony鸿蒙实战开发-背单词app「仿不背单词」【源码在文末】

Harmony鸿蒙实战开发-背单词app【源码在文末】



运行工具:DevEco Studio
一、运行演示

1、登录

https://i-blog.csdnimg.cn/blog_migrate/a559ec1172fc6a419d87b2f3676bfb69.png 2、注册

https://i-blog.csdnimg.cn/blog_migrate/cc97cdcf1e487ad0835b0e2946db3382.png 3、开机动画

https://i-blog.csdnimg.cn/blog_migrate/3ce5396347a2f82ce51569499b810244.png 4、首页

https://i-blog.csdnimg.cn/blog_migrate/b59f601f5f0de6dcebcfd5fc03ce4794.png 5、开始学习

https://i-blog.csdnimg.cn/blog_migrate/b4ad9e9692c0a15af19d74ba3d4ba447.png 6、开始学习-看答案

https://i-blog.csdnimg.cn/blog_migrate/675d9bf00d26a34ae4a463653244b285.png 7、统计分析

https://i-blog.csdnimg.cn/blog_migrate/a57d4d6127f99beb45692226323c0e4a.png 8、不背学堂

https://i-blog.csdnimg.cn/blog_migrate/c522dcdc11794eb605cf1ebeab990af0.png 二、部门代码

import http from '@ohos.net.http';

import fs from '@ohos.file.fs';
import ReadOptions from "@ohos.file.fs"
import common from '@ohos.app.ability.common';
import buffer from '@ohos.buffer';


export namespace YouDaoDict {

const BUFFER_FILE_PATH = '/you_dao_dict_cache.json';

export type QueryResult = {
    source: string;
    pronunciation: {
      en?: string;
      us?: string;
    };
    meaning: Array<{
      position?: string;
      translation: string;
    }>;
    sentence: Array<{
      sentence: string;
      translation: string;
    }>;
};

let queryCache: Record<string, QueryResult> = undefined;

async function loadLocalCache() {
    let context = getContext(this) as common.UIAbilityContext;
    let filePath = `${context.cacheDir}${BUFFER_FILE_PATH}`
    let file: fs.File;
    if (!await fs.access(filePath)) {
      file = await fs.open(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
      await fs.write(file.fd, '{}');
      await fs.fdatasync(file.fd);
      await fs.close(file);
    }
    queryCache = JSON.parse(await fs.readText(filePath, { encoding: 'UTF-8' }));
}

async function cacheQuery(word: string): Promise<QueryResult> {
    if (queryCache === undefined) await loadLocalCache();
    let result = queryCache;
    if (result !== undefined) return result
    return null;
}

async function cacheAdd(word: string, result: QueryResult): Promise<void> {
    queryCache = result;
    let serialized = JSON.stringify(queryCache);
    let context = getContext(this) as common.UIAbilityContext;
    let filePath = `${context.cacheDir}${BUFFER_FILE_PATH}`
    let file = await fs.open(filePath, fs.OpenMode.WRITE_ONLY | fs.OpenMode.CREATE);
    await fs.write(file.fd, serialized);
    await fs.fsync(file.fd);
    await fs.close(file);
}

export async function query(word: string): Promise<QueryResult> {
    let result: QueryResult | null = await cacheQuery(word);
    if (result) return result;
    let httpReq = http.createHttp();
    let httpResponse = await new Promise<http.HttpResponse>((resolve, reject) => {
      httpReq.request(
      'https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4',
      {
          method: http.RequestMethod.POST,
          header:{
            'Content-Type':'application/x-www-form-urlencoded'
          },
          extraData: `q=${word}`
      },
      (err, data) => {
          if (err !== undefined) reject(err);
          resolve(data)
      }
      )
    })
    let res = JSON.parse(httpResponse.result.toString());
    result = {
      source: word,
      pronunciation: {
      en: res['ec']['word']['ukphone'] as string,
      us: res['ec']['word']['usphone'] as string
      },
      meaning: [],
      sentence: []
    };
    (res['ec']['word']['trs'] as Array<{
      pos?: string;
      tran: string
    }>).forEach(elem => {
      result.meaning.push({ position: elem.pos, translation: elem.tran });
    });
    (res['blng_sents_part']['sentence-pair'] as Array<{
      sentence?: string;
      'sentence-translation': string
    }>).forEach(elem => {
      result.sentence.push({ sentence: elem.sentence, translation: elem['sentence-translation'] });
    })

    cacheAdd(word, result);
    return result;
}
}
三、源码

相关鸿蒙项目点此专栏
https://img-blog.csdnimg.cn/img_convert/88d33a6c014452f1f5f266fcca61fa50.png
通过百度网盘分享的文件:…zip 链接:百度网盘 请输入提取码
   文件已经加密,请点击下方手刺获取源码
或:One_PQ

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Harmony鸿蒙实战开发-背单词app「仿不背单词」【源码在文末】