Even麻吉灬 2024-04-18 11:10 采纳率: 0%
浏览 28

网络请求中如何封装对话框并调用

请问一下
鸿蒙API9+axios封装一个通用工具类中,
网络请求工具类AxiosRequest下的hideLoadingDialog与showLoadingDialog是如何封装的?

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-18 11:10
    关注

    引自免费微信小程序:皆我百晓生

    在HarmonyOS上,我们可以使用@ohos.network.HttpClient进行网络请求,并且可以通过创建自定义对话框来实现loading效果。这里我会提供一个基本的示例,展示如何在AxiosRequest类中封装显示和隐藏加载对话框的方法。

    首先,我们需要导入必要的包:

    import ohos.app.Context;
    import ohos.app.Dialog;
    import ohos.app.Layout;
    import ohos.ui.common.LinearGravity;
    import ohos.ui.flat.Button;
    import ohos.ui.flat.FlatLinearLayout;
    import ohos.ui.flat.FlatUIComponent;
    import ohos.ui.model.Text;
    

    接下来,我们创建一个名为LoadingDialog的内部类,用于表示加载对话框:

    private class LoadingDialog extends Dialog {
        private Text loadingText;
    
        public LoadingDialog(Context context) {
            super(context);
            initLayout();
        }
    
        private void initLayout() {
            Layout layout = new FlatLinearLayout(getContext(), LinearGravity.CENTER, LinearGravity.CENTER);
            layout.setPadding(30, 30, 30, 30);
    
            loadingText = new Text(getContext());
            loadingText.setText("正在加载...");
            loadingText.setTextSize(24);
            loadingText.setTextColor("#ffffff");
            loadingText.setAlignment(Layout.Alignment.CENTER);
    
            Button cancelButton = new Button(getContext());
            cancelButton.setText("取消");
            cancelButton.setOnAction(new Runnable() {
                @Override
                public void run() {
                    dismiss();
                }
            });
    
            layout.addComponent(loadingText);
            layout.addComponent(cancelButton);
    
            setRootComponent(layout);
        }
    }
    

    现在我们在AxiosRequest类中添加显示和隐藏加载对话框的方法:

    public class AxiosRequest {
        private Context context;
    
        public AxiosRequest(Context context) {
            this.context = context;
        }
    
        // 显示加载对话框
        public void showLoadingDialog() {
            LoadingDialog dialog = new LoadingDialog(context);
            dialog.show();
        }
    
        // 隐藏加载对话框
        public void hideLoadingDialog() {
            if (dialog != null && dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    
        // 进行网络请求的方法
        public void makeNetworkRequest() {
            // 在此方法内进行网络请求,例如使用HttpClient
            // 在请求开始时调用showLoadingDialog()
            showLoadingDialog();
    
            HttpClient client = new HttpClient();
            HttpRequest request = new HttpRequest("https://api.example.com/data", HttpMethod.GET);
            
            // 添加回调,在请求成功、失败或取消时调用hideLoadingDialog()
            client.send(request, new HttpResponseCallback() {
                @Override
                public void onReceived(HttpResponse response) {
                    hideLoadingDialog();
                    // 处理响应数据
                }
    
                @Override
                public void onError(int code, String description) {
                    hideLoadingDialog();
                    // 处理错误
                }
    
                @Override
                public void onCancel() {
                    hideLoadingDialog();
                    // 取消操作
                }
            });
        }
    }
    

    在这个例子中,我们创建了一个AxiosRequest类,它包含了显示和隐藏加载对话框的方法。当进行网络请求时,首先调用showLoadingDialog(),然后发送请求,并在请求完成(无论成功还是失败)后调用hideLoadingDialog()。这样可以确保在等待网络响应期间,始终有一个加载对话框可见。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月18日

悬赏问题

  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线