簡體   English   中英

離子Android和錯誤的URL

[英]Ion Android and wrong URL

我正在為Android使用離子庫https://github.com/koush/ion
我從服務器下載文件,並且當我傳遞不在服務器上的文件的URL時,它還是保存在SD卡中。 為了清楚起見,假設我有以下URL: https : //example.com/img/img_3.jpg但沒有這樣的文件。 因此,實際上該URL是404 Not Found,但是ion在我的SD卡上創建了一個文件img_3.jpg。 當我打開圖像時,它是空白的。 我嘗試檢查下載的文件是否為空,但不是。 因此有可能禁止從不存在的URL下載。
這是我的代碼:

private void executeDownload(final FilesToDownload downloadFiles) {
        if (downloading != null && !downloading.isCancelled()) {
            resetDownload();
            return;
        }
        FileAndDirName fileAndDir = downloadFiles.popFileAndDirName();
        final int size = downloadFiles.getFilesAndDirSize();
        final String fileName = fileAndDir.getFileName();
        final String dirName = fileAndDir.getDirName();
        String url = mServerUrl + dirName + "/" + fileName;

        File dir = new File(root.getAbsolutePath() + "/seatconnect/" + dirName);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        final File destinationFile = new File(dir, fileName);

        downloading = Ion.with(getActivity())
                .load(url)
                        // attach the percentage report to a progress bar.
                        // can also attach to a ProgressDialog with progressDialog.
                .progressBar(mProgressBar)
                .progressDialog(mProgressDialog)
                        // callbacks on progress can happen on the UI thread
                        // via progressHandler. This is useful if you need to update a TextView.
                        // Updates to TextViews MUST happen on the UI thread.
                .progressHandler(new ProgressCallback() {
                    @Override
                    public void onProgress(long downloaded, long total) {
//                        mProgressDialog.setProgress((int) downloaded);
                    }
                })
                        // write to a file
                .write(destinationFile)
                        // run a callback on completion
                .setCallback(new FutureCallback<File>() {
                    @Override
                    public void onCompleted(Exception e, File result) {
                        resetDownload();
                        if (e != null) {
                            Toast.makeText(getActivity(), "Error downloading file " + fileName, Toast.LENGTH_SHORT).show();
//                            return;
                        } else {
                            Toast.makeText(getActivity(), "File download complete " + fileName, Toast.LENGTH_SHORT).show();
                        }

                        if (result.exists() && result.length() == 0) {
                            String message = result.delete() ? "Deleted empty file " : "The file is not empty ";
                            message += fileName;
                            Log.d(TAG, message);
                        }

                        if (size != 0) {
                            mProgressDialog.show();
                            executeDownload(downloadFiles);
                            return;
                        }

                        mProgressBar.setVisibility(View.INVISIBLE);
                        if (mProgressDialog.isShowing()) {
                            mProgressDialog.dismiss();
                        }
                        mNewsFooterCheckForUpdateButton.setVisibility(View.VISIBLE);
                        mNewsFooterUpdateButton.setVisibility(View.INVISIBLE);
                    }
                });
}

也許為時已晚,但我認為您可以使用withResponse()來處理它,該方法基本上將下載的文件嵌入com.koushikdutta.ion.Response對象中,該對象當然包含標頭。 然后,您可以檢查它們以確保沒有返回錯誤代碼。

downloading = Ion.with(getActivity())
            .load(url)
            .progressBar(mProgressBar)
            .write(destinationFile)
            .withResponse() // response will incapsulates the result file
            .setCallback(new FutureCallback<Response<File>>()
                @Override
                public void onCompleted(Exception e, Response<File> response) {
                    File result = null;
                    if (e != null || response.getHeaders().code() != 200)) { // check response headers
                        // an error was occurred
                        // ...
                    } else {
                        // file was successfully downloaded
                        result = response.getResult();
                        // ...
                    }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM