【问题标题】:Acces to Assets file in android application在 android 应用程序中访问 Assets 文件
【发布时间】:2019-09-08 15:51:32
【问题描述】:

我的申请有问题。 我尝试访问 Assets 文件夹并在目录中下载一些 PDF 文件。

当我在我的 Galaxy S9 (API 28) 上尝试代码时,它工作得很好。 但是当我在 Galaxy S2 选项卡 (API24) 上尝试代码时,什么也没有发生。

我使用此代码访问和下载 pdf 文件:

        public void copyAssets(Context context)
        {
            DownloadComplete = false;
            Log.d("tag", "Here 1 ?");
            AssetManager assetManager = context.getAssets();
            Log.d("tag", "Here 2 ?");
            String[] files = null;
            Log.d("tag", "Here 3?");
            try
            {
                files = assetManager.list(resAventure + "/");
                Log.d("tag", "Here  4?");
            } catch (IOException e) {
                Log.d("tag", "Failed to get asset file list.", e);
            }
            if (files != null) for (String filename : files)
            {
                Log.d("tag", "Here 5?");
                InputStream in = null;
                OutputStream out = null;
                try {
                    Log.d("tag", "Here 6?");
                    in = assetManager.open(resAventure + "/" + filename);
                    out = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/Escape/" + resAventure + "/" + filename);
                    copyFile(in, out);
                    Toast.makeText(getApplicationContext(), "Téléchargement effectué sur l'appareil", Toast.LENGTH_LONG).show();
                    DownloadComplete = true;

                } catch(IOException e) {
                    Log.d("tag", "Failed to copy asset file: " + filename , e);
                }
                finally
                {
                    if (in != null)
                    {
                        try
                        {
                            in.close();
                            in = null;
                        } catch (IOException e)
                        {
                            Log.d("tag", "Failed A", e);
                        }
                    }
                    if (out != null)
                    {
                        try {
                            out.flush();
                            out.close();
                            out = null;
                        } catch (IOException e)
                        {
                            Log.d("tag", "Failed B", e);
                        }
                    }
                }
            }
        }
        public  void copyFile(InputStream in, OutputStream out) throws IOException
        {
            byte[] buffer = new byte[1024];
            int read;
            while((read = in.read(buffer)) != -1){
                out.write(buffer, 0, read);
            }
        }

在 API28 中一切正常。但在 API24 中,我只有在日志中:

D/ViewRootImpl@45de4c3[documents]: ViewPostImeInputStage processPointer 1
D/tag: Here 1 ?
Here 2 ?
Here 3?
D/tag: Here  4?
D/ViewRootImpl@45de4c3[documents]: ViewPostImeInputStage processPointer 0 

资产文件夹的两个 API 有区别吗? 我不明白为什么它只工作一次......

somoene 可以帮帮我吗?

【问题讨论】:

  • 如果我对文件添加测试: if (files == null) { Log.d("tag", "null !!!!"); } if (files != null) { Log.d("tag", "Not null !!!!"); } if (files != null) for (String filename : files) { 我有 Not null !!!在日志中。所以我想这里有一个问题: if (files != null) for (String filename : files)
  • 也许这里 String[] files = null; ?

标签: android assets


【解决方案1】:

我找到了。

我替换: 文件 = assetsManager.list(resAventure + "/"); 经过 文件 = assetsManager.list(resAventure);

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 2016-04-19
    • 2015-03-09
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多