在网络调用期间显示 ProgressDialog,直到完成

2024-02-22

I am very很沮丧,因为我一直在等待网络调用时尝试实现一个超级简单的加载轮。我已经搜索并阅读了几十个这样的问题,我只是觉得我一定错过了一些东西,除非没有人真正做我想做的事情。我尝试过AsyncTask路线,但这不是我想要的。

我还要说的是,现在我的应用程序运行得很好,只是从一个屏幕到另一个屏幕的转换似乎在等待网络时挂起。我只想要一个加载轮,以便用户在 1-2 秒内知道应用程序正在运行并且没有冻结。

这是我当前的网络调用的样子:

 private static String sendDataToServer(String arg1, String arg2)
 {        
    Thread dbThread = new Thread()
    {
        public void run()
        {
             // do the call that takes a long time    
        }
    };
    dbThread.start();
    try {
        // I do this so that my program doesn't continue until
        // the network call is done and I have received the information
        // I need to render my next screen
        dbThread.join();
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
 }

现在,为什么我不能添加ProgressDialog像这样?如果我这样做,进度对话框永远不会出现。

 private static String sendDataToServer(String arg1, String arg2)
 {
    final ProgressDialog progress = new ProgressDialog(BaseActivity.getInstance());
    progress.setIndeterminate(true);
    progress.setMessage("Loading...");
    progress.show();

    Thread dbThread = new Thread()
    {
        public void run()
        {
             // do the call that takes a long time    
        }
    };
    dbThread.start();
    try {
        dbThread.join();
        progress.dismiss();
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
 }

我认为我陷入了困境,因为网络调用需要位于与 UI 线程不同的线程上,但我不想继续我的应用程序,因为我需要该调用的结果才能继续。但如果我这样做thread.join()我撑起一切。我以为我需要AsyncTask但这种情况很快就走下坡路了。如果你好奇的话,这是我的问题。Android的AsyncTask:多个参数,返回值,等待 https://stackoverflow.com/questions/15153919/androids-asynctask-multiple-params-returning-values-waiting

当这个调用发生时,我到底如何只显示一个加载对话框,而不继续执行我的应用程序的其余部分?

EDIT

这是我的AsyncTask试图。

private class PostToFile extends AsyncTask<PostToFile, Void, Void>{
    private String functionName;
    private ArrayList<NameValuePair> postKeyValuePairs;
    private String result = "";

    public PostToFile(String function, ArrayList<NameValuePair> keyValuePairs){
        functionName= function;
        postKeyValuePairs = keyValuePairs;
    }

    @Override
    protected void onPreExecute() {
        progressDialog = ProgressDialog.show(BaseActivity.getInstance(), "Loading", "Please wait...", true, false);
    }

    @Override
    protected Void doInBackground(PostToFile... params) {                       
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair(FUNCTION_KEYWORD, functionName));
        for (int i = 0; i < postKeyValuePairs.size(); i++)            {
            nameValuePairs.add(postKeyValuePairs.get(i));
        }

        try{
            // ***do the POST magic.***
            result = response.toString();
        }
        catch (Exception e){
             // clean up my mess
        }

        return null;
    }

    private String getResult(){
        return result; // can I use this somehow???
    }

    @Override
    protected void onPostExecute(Void result) {
        progressDialog.dismiss();
    }
 }

当我使用它时:

        new PostToPHP(FUNCTION_NAME, postPairings){
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                try
                {
                    if (result != null && !result.startsWith("null"))
                    {
                        JSONArray jArray = new JSONArray(result);
                        parseData(jArray);
                    }
                }
                catch (JSONException e)
                {
                    Log.e(Constants.LOG_TAG, e.toString());
                }
            };
        }.execute()

问题是,我连续有几个这样的调用,并且它们每个都相互依赖。所以第一个开始,第二个开始立即地在第一个开始之后,但是before第一个是finished。所以我得到了错误的行为。如何在第一个通话完全完成后才开始第二个通话?


也许这会起作用,我还没有测试过,但你可以尝试:

public class MyTask extends AsyncTask<String, Void, String> {
    private int flag;


    public MyTask(int flag) {
        this.flag = flag;
    }


    @Override
    protected String doInBackground(String... params) {
        switch (flag) {
            case 1:
                return doNetworking1();
            break;
            case 2:
                return doNetworking2();
            break;
            case 3:
                return doNetworking3();
            break;
            default:
                return doNetworking1();

        }
    }

    @Override
    protected void onPreExecute() {
        //show progress dialog
    }

    @Override
    protected void onPostExecute(String s) {
        //hide progress dialog
        switch (flag) {
            case 1: //do something with result
                new MyTask(2).execute();
                break;
            case 2: //do other stuff
                new MyTask(3).execute();
                break;
            case 3: //do event more stuff
                break;
            default:
                //do something
        }
    }
}

和用法:

new MyTask(1).execute();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在网络调用期间显示 ProgressDialog,直到完成 的相关文章

  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • org/codehaus/plexus/archiver/jar/JarArchiver(不支持的major.minor版本49.0)-Maven构建错误

    下午大家 我在尝试构建项目时收到上述错误 我很确定这与使用 Java 1 6 编译的 Maven 最新更新有关 而我们尝试构建的项目是 1 4 项目 在此之前的插件工作没有问题 因此我将以下内容添加到 POM xml 文件中以尝试强制使用现
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • Android SearchView 在启动时隐藏键盘

    我有一个小问题正在尝试解决 当我打开应用程序时 键盘会显示输入搜索视图的查询 不过 我只想在单击搜索视图时显示键盘 我该如何解决 Thanks 这对我有用 用于隐藏焦点的代码 searchView SearchView view findV
  • Android:GestureDetector 无法与选项卡(TabActivity、Tabwidget)一起工作(gestureDetector.onTouchEvent(event) 始终为 false)

    我已经用不同的子活动实现了 TabActivity intent new Intent setClass this MyChildTabActiviy class Initialize a TabSpec for each tab and
  • 受信任的网络活动 - 地址栏不隐藏(Android 72 的 Chrome)

    我已经关注了this https developers google com web updates 2017 10 using twa了解如何使用受信任的 Web 活动的指南 一切正常 但地址栏仍然出现 一开始我认为这是因为当应用程序正在
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • 从 PowerShell 调用 Windows Shell 函数?

    所以我正在遵循这个教程 https msdn microsoft com en us library windows desktop hh127427 v vs 85 aspx https msdn microsoft com en us
  • iPhone 摄像机流媒体

    谁能确认这样的应用程序是如何完成的 袖珍相机 http www senstic com iphone pocketcam pocketcam aspx 是使用AVFoundation捕获摄像头视频流的方式吗 http developer a
  • 如何将选定的 HTML 转换为 Json?

    我想将部分 html 代码作为文件保存到 json 中 然后回顾 html 代码进行编辑 知道我该怎么做吗 div div div div
  • 如何将 c++filt 与 llvm-cov 报告一起使用?

    我正在尝试将 demangler 与 llvm cov 报告工具一起使用 以下是我正在运行的命令 llvm cov report path to executable instr profile path to default profda
  • 根据分组 ggplot2 条形的着色和阴影/纹理[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个条形图 就像下面的示例数据和脚本一样 对 4 个个体在治疗前后进行测量 抱歉 我没有足够的声誉来上传示例图片 我想用某种颜色绘制个体 例如汤姆为绿色 弗雷德红色等 但对于代表治疗的条形 我想在颜
  • 我是否应该尽可能在 C++11 中将“const int”替换为“constexpr int”?

    你会替换吗 const int one 1 const int two 2 有了这个 constexpr int one 1 constexpr int two 2 我的理解是否正确 两个块在语义上是相同的 并且目前只是一个品味问题 另一方
  • 如何通过 C# 方法使用 IronRuby 块

    我正在使用 IronRuby 并尝试找出如何通过 C 方法使用块 这是我尝试模拟的基本 Ruby 代码 def BlockTest result yield hello puts result end BlockTest x x world
  • Listview/DetailsView:隐藏空字段

    我想这是一个很常见的问题 但到目前为止我还没有找到一个优雅的解决方案 我有很多实例 其中有绑定到 SQL Server SPproc 的 ListView 或 DetailsView 控件 我遇到的问题是 在很多情况下 当列为空时 我想在
  • 如何使用 CSS 旋转导航栏中的元素?

    我试图让我的导航栏在我的 WordPress 网站中旋转 但无法使其居中并靠近屏幕左侧 这是我现在得到的屏幕截图 这是我正在使用的 CSS 代码 nav standard position fixed webkit transform ro
  • Hyperledger Composer Web 应用程序用户身份验证

    我已经使用 Hyperledger Composer 创建了一个业务网络 并且创建了一个简单的 Web 应用程序 用于添加参与者并使用 Angular 通过 Web 界面提交交易 另外 我已经使用护照启用了 REST 服务器的身份验证 并且
  • 在 Access 中创建 Outlook 收件箱电子邮件表

    UPDATE 下面的当前代码符合推荐的 SQL 构造 SqlString 中的错误 运行时错误 3011 Microsoft Access 数据库引擎找不到对象 请确保该对象存在 并且正确拼写其名称和路径名 如果 不是本地对象 请检查您的网
  • Tweepy OpenSSL.SSL.WantReadError

    Python 3 6 我使用 tweepy 的 Streamer 来获取推文 效果很好 但有时 如果我让它打开超过 24 小时 就会出现此错误 Traceback most recent call last File C ProgramDa
  • C++ 中的 bool 是什么?

    我遇到了一些非常有趣的代码 这让我想知道 bool 是什么 我一直认为它是原始类型 例如 int char 或 long 但今天 我看到了这样的东西 void boolPtrTest bool thisBool true boolPtrHe
  • sas中的分组依据

    我有以下数据集作为输入 ID 1 2 2 3 4 4 4 5 并需要一个新的数据集 如下所示 ID count of ID 1 1 2 2 3 1 4 3 5 1 您能告诉我如何在 SAS 中执行此操作而不使用 PROC SQL 吗 或者
  • 为我的 WCF 服务启用 SSL

    我有一个在开发中使用 basicHttpBinding 的 WCF 服务 现在在产品中我们想要使用 SSL 我必须进行哪些更改才能强制仅使用 SSL 连接 MSDN 上的此页面解释了 WCF 绑定安全性 http msdn microsof
  • 定义API时我应该返回CompletableFuture还是Future?

    在Java 8中 接口或抽象类定义返回的API更好吗 CompletableFuture而不是返回Future 考虑到转换很难看Future to CompletableFuture https stackoverflow com ques
  • 向 pandas 绘图添加小刻度

    我有以下代码 from pandas datareader import data as web import matplotlib pyplot as plt fig ax1 ax2 plt subplots 2 1 df web Dat
  • 如果互联网或信号中断,如何捕获异常

    我正在使用媒体播放器和流音频 我想知道如果互联网或信号中断并且无法再传输音频 捕获异常的最佳方法是什么 下面是我到目前为止所做的代码 正如您所看到的 我用相同的消息抛出所有异常 private class taskDoSomething e
  • Parse.com Javascript SDK 使用 include,但不起作用

    我正在尝试从名为的表中获取数据Book 里面Book有一个Pointer
  • 在网络调用期间显示 ProgressDialog,直到完成

    I am very很沮丧 因为我一直在等待网络调用时尝试实现一个超级简单的加载轮 我已经搜索并阅读了几十个这样的问题 我只是觉得我一定错过了一些东西 除非没有人真正做我想做的事情 我尝试过AsyncTask路线 但这不是我想要的 我还要说的