HarmonyOS 能否提供一个"正在加载中"的进度动画demo能运行在har中?

请参考图中正在加载中的demo,这个是其他系统中"正在加载中"的动画,HarmonyOS我看下可以使用Image.animation来实现,但是我们har本身没有页面,如何在har的class中动态的添加"正在加载中"的动画呢?

HarmonyOS 能否提供一个"正在加载中"的进度动画demo能运行在har中? -鸿蒙开发者社区

HarmonyOS
2025-01-09 16:02:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

promptAction弹不出来是因为unPay方法中嵌套了异步操作之后uicontext没有更新,而 promptAction.showToast调用的系统吐司是根据uicontext调用的,需要将uicontext传进来在异步操作中调用uiContext.getPromptAction().showToast就可以解决问题了,参考以下修改:

在Payment.ets中:

import { WindowUtils } from './WindowUtils';
import { promptAction, UIContext } from '@kit.ArkUI';
import { BusinessError } from '@ohos.base';
import { HttpClient, TimeUnit, Request, Logger, RequestBody } from '@ohos/httpclient';
import { common } from '@kit.AbilityKit';


export class Payment {
  amount: number = 123;
  transType: string = "0005";
  transTime: string = "20240729";
  orderId: string = "";
  // context:common.BaseContext=getContext()

  unPay(orderId: string,uiContext:UIContext) {
    WindowUtils.showLoading(getContext(), "正在加载中")

    // setTimeout(()=>{
    // this.orderId=orderId;
    // console.log(orderId+"支付成功!");
    // WindowUtils.hideLoading();
    // promptAction.showToast({message:orderId+"已经支付,请勿重复支付",duration:3000});
    // }, 3000)
    //上面这种可以,加了httpclient就会重新这个bug了
    let serverUrl = "https://www.huawei.com";
    let initStr = "123123123123234345";
    let client: HttpClient = new HttpClient.Builder()
      .setConnectTimeout(60, TimeUnit.SECONDS)
      .setReadTimeout(60, TimeUnit.SECONDS)
      .setWriteTimeout(60, TimeUnit.SECONDS)
      .build();

    let request = new Request.Builder()
      .url(serverUrl)// 配置对应url
      .post(RequestBody.create(initStr))
      .addHeader("Content-Type", "text/x-markdown")
      .addHeader("charset", "utf8")
      .build();

    client.newCall(request)// 发起异步请求
      .enqueue((result: string) => {
        setTimeout(() => {
          this.orderId = orderId;
          console.log(orderId + "支付成功!");
          WindowUtils.hideLoading();
          uiContext.getPromptAction().showToast({ message: orderId + "已经支付,请勿重复支付", duration: 5000 })
          // promptAction.showToast({ message: orderId + "已经支付,请勿重复支付", duration: 5000 });
        }, 3000)
      }, (error: BusinessError) => {
        WindowUtils.hideLoading();
        Logger.error('init error == ' + JSON.stringify(error));
      });
  }
}

在Index.ets中:

import { WindowUtils } from './WindowUtils';
import { Payment } from './Payment';




@Entry({routeName: 'Index'})
@Component
struct Index {

  build() {
    Column(){
      Button('点击加载全局loading').onClick(()=>{
        new Payment().unPay("0123456789",this.getUIContext());
        // WindowUtils.showLoading(getContext(),'加载loading')
        // setTimeout(()=>{
        // WindowUtils.hideLoading();
        // }, 3000)
      })

    }
  }
}
分享
微博
QQ
微信
回复
2025-01-09 18:05:15
相关问题
HarmonyOS能否提供一个NFC识别的demo
787浏览 • 1回复 待解决
HarmonyOS 能否提供一个视频压缩demo
449浏览 • 1回复 待解决
能否提供一个关于SM3加密demo
1150浏览 • 1回复 待解决
提供一个关于地图组件使用demo
1099浏览 • 1回复 待解决
能否提供一个SM3加密案例
984浏览 • 1回复 待解决