Попытка загрузить файл из приложения Android - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь загрузить файл из моего приложения.Я настроил кнопку onClickListener для вызова этого метода:

private void downloadFile(String fileUrl, File destDir, String fileName) {
    try {
        URL url = new URL(fileUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setDoOutput(true);
        connection.connect();

        if (destDir.isDirectory() && !destDir.exists()) {
            destDir.mkdirs();
        }

        FileOutputStream output = new FileOutputStream(new File(destDir.toString() + "/" + fileName));

        InputStream input = connection.getInputStream();

        byte[] buffer = new byte[1024];
        int byteCount = 0;

        while ((byteCount = input.read(buffer)) != -1) {
             output.write(buffer, 0, byteCount);
        }

        output.close();
        input.close();
    } catch (IOException e) {
        Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        Log.e("IOException", "Error: " + e.getMessage(), e);
    } finally {
        Toast.makeText(this, "File downloaded: " + fileName, Toast.LENGTH_SHORT).show();
    }
}

Я изучал различные темы, но ни один из них не нашел подходящего решения.Когда я использую код, указанный выше, ничего не происходит.

РЕДАКТИРОВАТЬ: файл будет загружаться в фоновом режиме и покажет короткий тост, когда закончите.Кнопка, кажется, "нажата" во время загрузки, хотя.Есть мысли по этому поводу?

Спасибо за вашу помощь!

На самом деле мне не нужен весь этот код.Мне просто нужно было использовать что-то похожее на это:

private void getFile(String url) {
    try {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        Log.e("ActivityNotFoundException", "Error: " + e.getMessage(), e);
    } catch (NullPointerException e) {
        Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        Log.e("NullPointerException", "Error: " + e.getMessage(), e);
    }
}

Это также должно быть полезно для некоторых людей:

private void openFile(File file) {
    try {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        Log.e("ActivityNotFoundException", "Error: " + e.getMessage(), e);
    } catch (NullPointerException e) {
        Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        Log.e("NullPointerException", "Error: " + e.getMessage(), e);
    }
}

1 Ответ

0 голосов
/ 29 ноября 2011

Если ничего не происходит, вы должны добавить некоторые записи в ваш код.

И вы также можете показать ошибку пользователю, позвонив Toast.makeText(context, ex.getMessage(), Toast.LENGTH_SHORT).show()

Лучше было бы показатьсообщение об основной причине, используя вспомогательные методы, подобные этим:

public static String getRootCauseMessage(Throwable ex) {
    ex = getRootCause(ex);
    String message = ex.getLocalizedMessage();
    return message == null ? ex.getClass().getSimpleName() : message;
}

public static Throwable getRootCause(Throwable ex) {
    Throwable cause = ex.getCause();
    return cause == null ? ex : getRootCause(cause);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...