Android DismissDialog 的 IllegalArgumentException

2024-07-03

我使用以下代码从我们的互联网下载一些文件。

public class SplashDownload extends Activity {

    public static final int PROGRESS_DIALOG = 0;
    private ProgressDialog mProgressDialog;
    private WordDataHelper wordDataHelper;
    private ExtraDataHelper extraDataHelper;

    // put your file path here
    private String filePath = "http://test.com/Assets/";
    // put your filename here
    private String fileName;
    // put your download directory name here
    private String downloadDir;

    private int wordCounter = 0, extraCounter = 0, counter = 1;

    private boolean wordDLOn = true;
    private int totalFileNo;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splashdllayout);
        getDownloadList();
    }

    private void goForward() {

        Intent intent = new Intent().setClass(this, LangH.class)
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }

    private void doNext() {

        if (wordDLOn) {

            System.out.print("wordDetails update: "
                    + wordDetails[wordCounter - 1][0]
                    + extraDetails[extraCounter][0] + fileName);
            wordDataHelper.updateDLStat(Long
                    .valueOf(wordDetails[wordCounter - 1][0]));
        } else {

            System.out.print("extraDetails update: "
                    + extraDetails[extraCounter - 1][0] + fileName);
            extraDataHelper.updateDLStat(Long
                    .valueOf(extraDetails[extraCounter - 1][0]));
        }

        if (wordCounter < wordDetails.length) {
            System.out.print("wordCounter: " + wordCounter + "/"
                    + wordDetails.length);
            startDownload(wordDetails[wordCounter][1]);
            wordCounter++;
        } else if (extraCounter < extraDetails.length) {
            wordDLOn = false;
            downloadDir = "LanH/extras";
            System.out.print("extraCounter: " + extraCounter + "/"
                    + extraDetails.length);
            startDownload(extraDetails[extraCounter][1]);
            extraCounter++;
        } else {
            goForward();
        }
    }

    private void getDownloadList() {

        // lessons download..........

        String[] wordDetails = {"1.mp4","2.mp4","3.mp4","4.mp4","5.mp4","6.mp4","7.mp4","8.mp4",};
        downloadDir = "LanH/words";


        String[] extraDetails = {"a.mp4","b.mp4","c.mp4","d.mp4","e.mp4","f.mp4","g.mp4","h.mp4",};


        totalFileNo = extraDetails.length + wordDetails.length;

        if (wordDetails.length != 0) {
            startDownload(wordDetails[wordCounter]);
            wordCounter++;
        } else if (extraDetails.length != 0) {
            wordDLOn = false;
            startDownload(extraDetails[extraCounter]);
            extraCounter++;
        } else {
            goForward();
        }

    }

    private void startDownload(String dlFilename) {
        // tv = (TextView) findViewById(R.id.tv1);
        fileName = dlFilename;
        System.out.print("fileName: " + fileName);

        File dir = new File(android.os.Environment
                .getExternalStorageDirectory().getAbsolutePath()
                + "/"
                + downloadDir);
        // creates the directory if it doesn't exists
        if (dir.exists() == false) {
            dir.mkdirs();
        }
        dir = null;

        if (checkNet()) {
            if (checkExternalMedia() == true) {
                String url = filePath + fileName;
                new DownloadFileAsync().execute(url, fileName);
                mProgressDialog.setMessage("Downloading file.." + fileName);
            } else {
                Toast.makeText(getApplicationContext(),
                        "External Media is NOT readable/writable",
                        Toast.LENGTH_SHORT).show();
            }
        } else {

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("No Internet Connectivity. Check the connection and retry the app.")
                    .setCancelable(false)
                    .setPositiveButton("OK",
                            new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int id) {
                            finish();
                        }
                    });
            AlertDialog alert = builder.create();
            alert.show();
        }
    }


    /** Method to check whether external media available and writable. */
    private boolean checkExternalMedia() {
        boolean stat;
        String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.equals(state)) {
            // Can read and write the media
            stat = true;
        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            // Can only read the media
            stat = false;
        } else {
            // Can't read or write
            stat = false;
        }
        return stat;
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case PROGRESS_DIALOG:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading file.." + fileName);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
        }
    }

    class DownloadFileAsync extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(PROGRESS_DIALOG);
        }

        @Override
        protected String doInBackground(String... aurl) {
            int count;

            try {
                URL url = new URL(aurl[0]);
                URLConnection conexion = url.openConnection();
                conexion.connect();

                int lenghtOfFile = conexion.getContentLength();
                Log.d("DOWNLOAD_TEST", "Lenght of file: " + lenghtOfFile);

                InputStream input = new BufferedInputStream(url.openStream());
                OutputStream output = new FileOutputStream(
                        android.os.Environment.getExternalStorageDirectory()
                                + "/" + downloadDir + "/" + aurl[1]);

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));
                    output.write(data, 0, count);
                }

                output.flush();
                output.close();
                input.close();
            } catch (Exception e) {
            }
            return null;

        }

        protected void onProgressUpdate(String... progress) {
            Log.d("DOWNLOAD_TEST", progress[0]);
            mProgressDialog.setProgress(Integer.parseInt(progress[0]));
        }

        @Override
        protected void onPostExecute(String unused) { 

            dismissDialog(PROGRESS_DIALOG);

            // tv.append("\n\nFile Download Complete!");
            // Button btn = (Button) findViewById(R.id.btn1);
            // btn.setVisibility(View.GONE);

            // you can call a second intent here to redirect to another screen
            doNext();
        }
    }

    private boolean checkNet() {
        boolean connected = false;
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                .getState() == NetworkInfo.State.CONNECTED
                || connectivityManager.getNetworkInfo(
                        ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
            // we are connected to a network
            connected = true;
        } else
            connected = false;
        return connected;

    }

    @Override
    public void onDestroy() {
        super.onDestroy();

    }
}

该过程运行良好。据报道,崩溃报告如下:

java.lang.IllegalArgumentException: no dialog with id 0 was ever shown via Activity#showDialog
at android.app.Activity.missingDialog(Activity.java:2663)
at android.app.Activity.dismissDialog(Activity.java:2648)
at com.langhost.main.SplashDownload$DownloadFileAsync.onPostExecute(SplashDownload.java:264)
at com.langhost.main.SplashDownload$DownloadFileAsync.onPostExecute(SplashDownload.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5068)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

我的代码有什么问题?是isShowing()之前检查dismissDialog会解决问题吗?


你的进度对话框真的显示了吗?
您可以尝试使用而不是忽略它removeDialog(PROGRESS_DIALOG);把它清理干净。

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

Android DismissDialog 的 IllegalArgumentException 的相关文章

  • thread/runnable、handler、runonuithread、asynctask 之间的区别

    我开始学习android编程并正在开发一个小游戏 我听说做后台操作或更新或下载或任何后台和耗时的事情不应该使用 ui 线程来完成 而是使用线程 可运行或异步任务 但我无法在线程中执行一些操作 例如与数据库的后台连接 因为此连接与剩余的处理程
  • setadapter后获取ListView高度

    好吧 我试图在更改数据后获取列表视图高度 但它总是返回先前的高度 而不是实际的高度 所以当我设置 setadapter 时 它会得到旧值 例如 ActualHeight 100 Change data filter gt NewHeight
  • 如何完全杀死 Android 线程?

    我有一个服务 它有自己的线程在后台运行 我想终止该服务 包括线程 我像这样创建了线程并运行它 public class DaemonService extends Service private DaemonThread thread cl
  • Android资源未找到异常?

    我在使用 findViewById id 时遇到一个奇怪的问题 尽管资源确实存在 但它返回时未找到资源 它是布局中的一个文本视图 旁边是另一个文本视图 我可以通过 id 找到其中一个文本视图 但另一个显示未找到资源 有什么原因可能会发生这种
  • Firebase 数据库崩溃 SQLiteDatabaseLockedException

    我在少数设备上遇到此崩溃 但仅限于 Android 4 我使用的是 Firebase Android SDK 10 2 1 11 0 2 推迟更新到最新版本 因为它也会强制更新 Google Play 服务 并且许多用户继续保留旧的 GPS
  • React Native Android 本地镜像

    我有这个
  • WorkManager 的 doWork() 为 OneTimeWorkRequest 多次调用

    我才刚刚开始探索WorkManager在我的应用程序中 我的应用程序大部分都是离线的 因此所有数据都使用 room db 存储在本地 一旦设备连接到网络 我想将本地数据同步到服务器 然后获取最新数据并再次同步本地数据库 这是我的doWork
  • Y'UV420p(和 Y'V12 或 YV12)到 RGB888 转换

    我正在尝试在 android 中显示 yuv 视频文件 我有一些正在使用的 yuv 视频文件 该视频yuv文件video1 https www dropbox com s wjofvdf9k9bglhx rawData1 yuv dl 0
  • 如何使用 Android Volley 显示/请求 JSON 对象?

    我在 Android Studio 中遇到如何请求 JSON 对象的问题 我的 Logcat 只能打印 String onResponse 而不能打印 JSONObject 值 我在 AccessActivity java 内的 try 行
  • 应用内结算:库存不正确;让用户再次购买

    编辑 仍在寻找我原来问题的答案 为什么 Android 不会看到该商品之前已购买过 而是让用户再次付款 设置 SharedPreferences 是一个不错的主意 但是如果用户卸载了怎么办 他们将不得不再次购买 我不希望用户这样 谢谢 我试
  • 仅第一行断点有效

    I am developing in Android Studio i ve used IntelliJ IDEA SDK I ve encountered debugging problem All my breakpoints don
  • Android Studio 0.2.7 使用 Gradle 构建异常

    我正在从 Eclipse 迁移到 Android Studio 尽管由于 Android Studio 仍处于 预览 模式 但我正在缓慢且增量地迁移 自从更新到最新版本的 Android Studio 0 2 7 以来 我在默认构建过程中遇
  • 如何将node.js应用程序转换为cordova

    我们建造了一个node js适用于台式机和平板电脑的应用程序 它是完全基于网络的应用程序 现在我计划在中实现与本机应用程序相同的应用程序android using Apache cordova 在项目目录下 我们有node modules
  • 相对于当前日期对 Java 集合进行排序

    我想相对于当前日期对日期列表进行排序 例如列表中有下一项 10 01 2018 10 20 2018 10 14 2018 10 02 2018 当前日期是10 08 2018 结果应该是按下一个顺序升序排列的数组 10 14 2018 1
  • 从用户操作中禁用整个活动

    有没有一种简单的方法来禁用用户与活动交互 当有一个操作正在运行时执行 并且标题栏中有一个旋转的进度条 编辑 看来我还不够清楚 我的意思是 虽然我已经有一个旋转的进度条 但用户仍然可以按活动上的任何按钮 我想禁止用户在任务正在运行 然而 我不
  • Androidx 模块,android:attr/ttcIndex 和 android:attr/fontVariationSettings 未找到

    我正在将所有支持 appcompat 库迁移到 androidx 所有更新后 由于此错误 我无法构建我的项目 app processDebugManifest UP TO DATE AGPBI kind error text error r
  • 在带有效果的 Android 按钮中使用图像

    现在我在 StackOverflow 上遇到了相关问题 但不幸的是没有一个解决方案对我有用 这就是为什么我不得不单独问这个问题 我是 Android 新手 问题 我需要一个充当按钮的图像 现在我明白 这可以通过在标准按钮上使用图像或使用称为
  • 使用lib添加自定义字体android

    我正在使用 android 自定义字体 lib Calligraphyhttps github com chrisjenx Calligraphy https github com chrisjenx Calligraphy 但对textv
  • 将图像添加到Toast?

    是否可以以编程方式将图像添加到 toast 弹出窗口 Yes 您可以使用 setView 方法将 imageview 或任何视图添加到 toast 通知中 使用此方法您可以根据您的要求自定义 Toast 在这里 我创建了一个要膨胀到 Toa
  • appcompat 在操作栏中显示进度导致 NPE

    将我的 SDK 更新到所有最新的 Android 5 0 后 我无法使用 appcompat 中 ActionBar 中内置的进度条 我已经完成了所有通常的修复 将 supportRequestWindowFeature 调用移至 setC

随机推荐

  • 如何使用 PowerShell 替换文件中出现的每个字符串?

    使用 PowerShell 我想替换所有出现的 MYID 在给定文件中MyValue 最简单的方法是什么 使用 V3版本 Get Content c temp test txt Replace MYID MyValue Set Conten
  • Socket.io 0.7.9 连接问题

    我正在尝试升级到 socket io 0 7 9 但遇到了问题 我使用了 socket io 主页上的基本示例 我的服务器是 var http require http url require url https require https
  • Socket.io 0.7.9 连接问题

    我正在尝试升级到 socket io 0 7 9 但遇到了问题 我使用了 socket io 主页上的基本示例 我的服务器是 var http require http url require url https require https
  • 如何使用 Laravel Eloquent 获取特定成绩数据?

    我想要的是 为了得到grade数据库中存在用户回答的内容 如果存在 并获取该答案的等级 我拥有的 I have 3桌子 short answer sa sa answer short answer answer Now short answ
  • 如何使用 Laravel Eloquent 获取特定成绩数据?

    我想要的是 为了得到grade数据库中存在用户回答的内容 如果存在 并获取该答案的等级 我拥有的 I have 3桌子 short answer sa sa answer short answer answer Now short answ
  • REST - PUT 方法在省略可选字段时是否必须删除该字段?

    我有资源Car其中有一些必填字段和其他可选字段 The Car是根据以下请求创建的 POST cars plate XYZ A2C4 color blue owner John OPTIONAL REST 客户端想要更新这辆车的所有必需信息
  • REST - PUT 方法在省略可选字段时是否必须删除该字段?

    我有资源Car其中有一些必填字段和其他可选字段 The Car是根据以下请求创建的 POST cars plate XYZ A2C4 color blue owner John OPTIONAL REST 客户端想要更新这辆车的所有必需信息
  • 如何从图库中获取图像的图像格式

    我想知道我从图库中获取的图像的图像格式 即 JPG PNG 等 我的需要是从设备的图库中获取图像并将其以 Base64 格式发送到服务器 但服务器想知道图像格式 任何帮助表示赞赏 Edited 使用以下方法从图库中检索图像的 MIME 类型
  • 如何从图库中获取图像的图像格式

    我想知道我从图库中获取的图像的图像格式 即 JPG PNG 等 我的需要是从设备的图库中获取图像并将其以 Base64 格式发送到服务器 但服务器想知道图像格式 任何帮助表示赞赏 Edited 使用以下方法从图库中检索图像的 MIME 类型
  • 如何在 JSF 2 中以编程方式或动态创建复合组件

    我需要在 JSF 2 中以编程方式创建复合组件 经过几天的搜索和实验 我找到了这个方法 深受 java net 上的 Lexi 的启发 Method will attach composite component to provided c
  • 如何在 JSF 2 中以编程方式或动态创建复合组件

    我需要在 JSF 2 中以编程方式创建复合组件 经过几天的搜索和实验 我找到了这个方法 深受 java net 上的 Lexi 的启发 Method will attach composite component to provided c
  • 同步时间 C#

    我有一个 C net 程序 部署在不同的机器上 我希望该程序的所有实例都使用与 Windows 时间服务器同步的 DateTime 变量 最好的方法是什么 更新开始 我能想到的另一种方法是公开一个服务 该服务将在其运行的计算机中返回 UTC
  • 同步时间 C#

    我有一个 C net 程序 部署在不同的机器上 我希望该程序的所有实例都使用与 Windows 时间服务器同步的 DateTime 变量 最好的方法是什么 更新开始 我能想到的另一种方法是公开一个服务 该服务将在其运行的计算机中返回 UTC
  • 表现不佳

    我正在为我的硕士论文进行性能测试 但 Symfony2 简单应用程序的性能非常差 这是一个简单的应用程序 一个查询和一些数学运算 命令测试结果 ab c10 t60http sf2 cities localhost app php http
  • 表现不佳

    我正在为我的硕士论文进行性能测试 但 Symfony2 简单应用程序的性能非常差 这是一个简单的应用程序 一个查询和一些数学运算 命令测试结果 ab c10 t60http sf2 cities localhost app php http
  • 目前没有可用的原型。当索引更新完成时,原型列表将刷新

    在 Eclipse 中m2eclipse安装后 当我选择 文件 gt 新建 gt 项目 gt Maven gt Maven 项目 with 使用默认工作区位置 and 目录 Nexus 索引器 选择后 出现以下错误消息 目前没有可用的原型
  • 目前没有可用的原型。当索引更新完成时,原型列表将刷新

    在 Eclipse 中m2eclipse安装后 当我选择 文件 gt 新建 gt 项目 gt Maven gt Maven 项目 with 使用默认工作区位置 and 目录 Nexus 索引器 选择后 出现以下错误消息 目前没有可用的原型
  • 为 Google 表单生成自己的 HTML

    我喜欢使用我自己的模板引擎生成 Google 表单 不幸的是 在基本主题中 您只能更改背景图像 字体 颜色等 我喜欢 bootstrap 风格的漂亮 HTML 页面 到目前为止 我可以看到我可以使用 Google 脚本来做到这一点 该脚本应
  • 为 Google 表单生成自己的 HTML

    我喜欢使用我自己的模板引擎生成 Google 表单 不幸的是 在基本主题中 您只能更改背景图像 字体 颜色等 我喜欢 bootstrap 风格的漂亮 HTML 页面 到目前为止 我可以看到我可以使用 Google 脚本来做到这一点 该脚本应
  • Android DismissDialog 的 IllegalArgumentException

    我使用以下代码从我们的互联网下载一些文件 public class SplashDownload extends Activity public static final int PROGRESS DIALOG 0 private Prog