HarmonyOS 鸿蒙Next网络加载过程中展示loading
HarmonyOS 鸿蒙Next网络加载过程中展示loading
网络加载过程中或是执行复杂操作时,显示加载loading,请问推荐什么方案
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