HarmonyOS 鸿蒙Next网络加载过程中展示loading

发布于 1周前 作者 phonegap100 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next网络加载过程中展示loading

网络加载过程中或是执行复杂操作时,显示加载loading,请问推荐什么方案

3 回复

import LoadingDialog from '[@lyb](/user/lyb)/loading-dialog'

export class RequestLoading {

  constructor() {

    this.initLoading()

  }

  public initLoading() {

    // 配置全局参数

    LoadingDialog.setGlobalSettings((setting) => {

      // setting.tintColor = Color.Black

      // setting.textColor = Color.Black

      // setting.backgroundColor = Color.Transparent

    })

  }

  public showLoading() {

    LoadingDialog.showLoading({ msg: '加载中...',})

  }

  public hideLoading() {

    LoadingDialog.hide()

  }

}

//AxiosRequest.ets

//AxiosRequest.ets

import {AxiosHttpRequest,errorHandler} from './AxiosHttp'

import { AxiosError, AxiosRequestHeaders, AxiosResponse } from '[@ohos](/user/ohos)/axios';

import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';

import { RequestLoading } from '../requestLoading/RequestLoading';

const loadingInstance:RequestLoading = new RequestLoading()

/**

 * axios请求客户端创建

 */

const axiosClient = new AxiosHttpRequest({

  baseURL: "/api",

  timeout: 10 * 1000,

  checkResultCode: false,

  headers: {

    'Content-Type': 'application/json'

  } as AxiosRequestHeaders,

  interceptorHooks: {

    requestInterceptor: async (config) => {

      // 在发送请求之前做一些处理,例如打印请求信息

      axiosClient.config.showLoading = config.showLoading

      if (config.showLoading) {

        loadingInstance.showLoading()

      }

      if (config.checkLoginState) {

        // let hasLogin = await StorageUtils.get(StorageKeys.USER_LOGIN, false)

        // LogUtils.debug('网络请求Request 登录状态校验>>>', `${hasLogin.toString()}`);

        // if (hasLogin) {

        //   return config

        // } else {

        //   if (config.needJumpToLogin) {

        //     Router.push(RoutePath.TestPage)

        //   }

        //   throw new AxiosError("请登录")

        // }

      }

      return config;

    },

    requestInterceptorCatch: (err:BusinessError) => {

      if (axiosClient.config.showLoading) {

        loadingInstance.hideLoading()

      }

      return err;

    },

    responseInterceptor: (response:AxiosResponse) => {

      //优先执行自己的请求响应拦截器,在执行通用请求request的

      if (axiosClient.config.showLoading) {

        loadingInstance.hideLoading()

      }

      if(response.data.Response?.Result?.token) {

        AppStorage.setOrCreate('token',response.data.Response?.Result?.token)

      }

      // LogUtils.debug('网络请求响应Response:', `\n${JsonUtils.stringify(response.data)}`);

      if (response.status === 200) {

        return Promise.resolve(response.data);

      } else {

        return Promise.reject(response);

      }

    },

    responseInterceptorCatch: (error:BusinessError) => {

      if (axiosClient.config.showLoading) {

        loadingInstance.hideLoading()

      }

      // LogUtils.error("网络请求响应异常", error.toString())

      errorHandler(error);

      return Promise.reject(error);

    },

  }

});

export default axiosClient;

在HarmonyOS鸿蒙系统中,对于Next网络加载过程中展示loading的情况,这通常涉及到应用程序在网络请求时的UI反馈机制。在开发过程中,为确保用户有良好的体验,当应用进行数据加载时,应当通过UI组件(如ProgressBar或自定义Loading视图)向用户展示加载状态。

HarmonyOS提供了丰富的UI组件库,开发者可以利用这些组件来创建视觉上的loading效果。具体实现时,可以在发起网络请求的函数内部,将Loading视图设置为可见状态;当网络请求完成,数据加载完毕后,再将Loading视图隐藏,同时更新UI以展示加载的数据。

此外,为了提高应用的响应性和用户体验,建议在处理网络请求时使用异步编程模型,如任务(Task)或异步回调(AsyncCallback),以避免阻塞主线程,确保Loading视图能够顺畅显示和更新。

如果开发者遵循了上述建议,但Loading视图仍无法正确显示,可能是由于网络请求逻辑、UI更新机制或系统资源分配等问题导致的。此时,建议详细检查代码逻辑,特别是网络请求和UI更新的部分,确保没有遗漏或错误。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部