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


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Even麻吉灬 2024-04-18 11:10 采纳率: 0% 浏览 1 首页/ HarmonyOS / 网络请求中如何封装对话框并调用 harmonyos网络华为 请问一下鸿蒙API9+axios封装一个通用工具类中,网络请求工具类AxiosRequest下的hideLoadingDialog与showLoadingDialog是如何封装的? 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 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()。这样可以确保在等待网络响应期间,始终有一个加载对话框可见。

      展开全部

      评论 编辑记录
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-18 11:10
      关注

      上午好☀️☀️☀️️
      本答案参考ChatGPT-3.5

      在网络请求工具类中封装对话框的一种常见实现方式是通过使用Dialog组件来创建加载对话框,并在网络请求开始和结束时显示和隐藏对话框。下面是一个示例的封装处理过程:

      1. 在网络请求工具类AxiosRequest中定义两个方法:showLoadingDialog()和hideLoadingDialog(),用于显示和隐藏加载对话框。
      private static volatile Dialog loadingDialog;
      
      public static void showLoadingDialog(Context context) {
          if (loadingDialog == null) {
              loadingDialog = new Dialog(context);
              loadingDialog.setContentView(R.layout.loading_dialog); // 自定义布局
              loadingDialog.setCanceledOnTouchOutside(false);
              loadingDialog.setCancelable(true);
          }
          if (!loadingDialog.isShowing()) {
              loadingDialog.show();
          }
      }
      
      public static void hideLoadingDialog() {
          if (loadingDialog != null && loadingDialog.isShowing()) {
              loadingDialog.dismiss();
          }
      }
      
      1. 在网络请求的开始和结束时调用showLoadingDialog()和hideLoadingDialog()方法来显示和隐藏对话框。

      2. 在请求开始之前调用showLoadingDialog()方法,在请求结束后调用hideLoadingDialog()方法。

      综上所述,封装对话框的过程主要涉及以下几个步骤:

      1. 创建一个Dialog实例作为加载对话框。
      2. 在请求开始之前调用showLoadingDialog()方法显示加载对话框。
      3. 在请求结束后调用hideLoadingDialog()方法隐藏加载对话框。

      解决方案:

      1. 在AxiosRequest类中定义showLoadingDialog()和hideLoadingDialog()方法,使用Dialog组件创建和管理加载对话框。
      2. 在请求开始前调用showLoadingDialog()方法显示对话框,请求结束后调用hideLoadingDialog()方法隐藏对话框。

      展开全部

      评论
    • GISer Liu 2024-04-18 11:23
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      针对你的问题,首先我们需要明确如何封装网络请求工具类 AxiosRequest,并在其中实现 showLoadingDialog 和
      hideLoadingDialog 方法。在鸿蒙应用中,我们可以使用 Dialog 组件来实现对话框的显示和隐藏。
      下面是我提出的解决思路和方案:

      解决思路:

      1. 创建一个 AxiosRequest 类来管理网络请求,并在其中添加 showLoadingDialog 和 hideLoadingDialog 方法。
      2. 在 showLoadingDialog 方法中,使用 Dialog 组件来显示加载对话框。
      3. 在 hideLoadingDialog 方法中,关闭已经显示的加载对话框。

        解决方案:

        1. 创建 AxiosRequest 类:

        首先,我们创建一个 AxiosRequest 类,用于管理网络请求和加载对话框的显示与隐藏。
        javascriptCopy code
        import { Dialog } from '@system.dialog';
        class AxiosRequest {
        // 构造函数
        constructor() {
        // 初始化加载对话框
        this.loadingDialog = null;
        }
        // 发起网络请求
        async request(url, options) {
        try {
        // 显示加载对话框
        this.showLoadingDialog();
        // 发起网络请求
        const response = await axios.request({
        url,
        ...options
        });
        // 隐藏加载对话框
        this.hideLoadingDialog();
        return response.data;
        } catch (error) {
        // 隐藏加载对话框
        this.hideLoadingDialog();
        throw error;
        }
        }
        // 显示加载对话框
        showLoadingDialog() {
        if (!this.loadingDialog) {
        this.loadingDialog = Dialog.prompt({
        message: '加载中...'
        });
        }
        }
        // 隐藏加载对话框
        hideLoadingDialog() {
        if (this.loadingDialog) {
        this.loadingDialog.close();
        this.loadingDialog = null;
        }
        }
        }
        // 导出 AxiosRequest 类
        export default AxiosRequest;
        

        2. 使用 AxiosRequest 类进行网络请求:

        接下来,我们可以使用创建的 AxiosRequest 类来发起网络请求,并自动显示/隐藏加载对话框。
        javascriptCopy code
        import AxiosRequest from 'path/to/AxiosRequest';
        // 创建 AxiosRequest 实例
        const axiosRequest = new AxiosRequest();
        // 发起网络请求示例
        async function fetchData() {
        try {
        const data = await axiosRequest.request('http://example.com/api/data', {
        method: 'GET',
        // 其他请求参数
        });
        // 处理返回的数据
        console.log(data);
        } catch (error) {
        // 处理请求错误
        console.error(error);
        }
        }
        // 调用 fetchData 函数发起网络请求
        fetchData();
        

        结论:

        通过以上方案,我们实现了在鸿蒙应用中封装了一个 AxiosRequest
        类,该类可以用于发起网络请求,并在请求过程中自动显示和隐藏加载对话框。这样,我们就可以在应用中更方便地管理网络请求和用户体验了。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【微信开发第二章】SpringBoot实现微信公众号普通消息和模板消息回复
    人工智能生成内容AIGC:AIGC for Various Data Modalities: A Survey
    git 删除历史提交中的某个文件,包含所有记录,过滤所有记录
    大数据必学Java基础(五十一):什么是算法和数据结构
    1.1.5 基于Ubuntu搭建LNMP环境
    JAVA基础(四十九)——自定义泛型
    【Linux】操作系统之冯诺依曼体系
    数智学习|湖仓一体实践与探索
    Exception : Content-Type cannot contain wildcard type ‘*‘
    如何理解【点击】和【滑动】两个常用的交互手势?
  • 原文地址:https://ask.csdn.net/questions/8090497