我正在尝试从我的应用程序中下载文件。我已经设置了一个按钮的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);
}
}
答案 0 :(得分:0)
如果没有任何反应,您应该在代码中添加一些日志记录。
您还可以通过调用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);
}