我正在制作一个应用程序列出上传的文件,然后我想用setOnItemLongClickListener下载它们。我得到下载网址并使用它来获取下载过程的参考。当我点击listview项目时,它说下载是成功的。但我在手机上看不到该文件。实际上我不知道应该在哪里。 我看到了类似的问题,但我找不到解决方案。我真的需要帮助来解决这个问题。
这是我的代码:
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View v,
int index, long arg3) {
try {
storage = FirebaseStorage.getInstance().getReferenceFromUrl(fileFirebase.get(index).toString());
StorageReference island=storage;
final File file = File.createTempFile("images", "jpg");
island.getFile(file).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(getActivity(),"Download is succesful!",Toast.LENGTH_LONG).show();
}
}).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
//taskSnapshot.getBytesTransferred();
//taskSnapshot.getTotalByteCount();
}
});}
catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
File.createTempFile
将该文件存储在Android的内部缓存目录中。
您应该new File
代替它,它将在您的应用程序目录范围内可用。
如果您使用的是root设备或模拟器,则可以查看/data/data/<package-name>
以查看下载的文件。
如果没有root,您可以浏览ADB shell到此位置。在Android Studio 3中,您有一个内置的文件浏览器来浏览应用程序的内部数据目录/data/data/<package-name>
。
您也可以考虑将文件存储在外部存储器中。为此,您需要在Manifest文件中声明权限。
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
点击此链接了解详情:https://developer.android.com/training/data-storage/files.html
答案 1 :(得分:1)
您可以使用Environment.getExternalStoragePublicDirectory在设备上获取下载目录,请参阅下文...,
对于Firebase云存储 - 文件上传,下载和删除示例,您可以看到http://www.zoftino.com/firebase-cloud-storage-upload-download-delete-files-android-example#download-file
String DOWNLOAD_DIR = Environment.getExternalStoragePublicDirectory
(Environment.DIRECTORY_DOWNLOADS).getPath();
StorageReference storageRef = firebaseStorage.getReference();
StorageReference downloadRef = storageRef.child(storageFile);
File fileNameOnDevice = new File(DOWNLOAD_DIR+"/"+fileName);
downloadRef.getFile(fileNameOnDevice).addOnSuccessListener(
new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Log.d("File download", "downloaded the file");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.e("File download", "Failed to download the file");
}
});