2017-01-24 3 views
0

Я новичок в Android и Firebase. В основном, я пытаюсь загрузить файл из Firebase и хранить его в хранилище Android, но я получаю странную ошибку "ENOENT: No such file or directory error". У меня также есть разрешение на запись.Ошибка текстового файла Firebase

Код:

public class MainActivity extends AppCompatActivity 
{ 

private StorageReference mStorageRef; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mStorageRef = FirebaseStorage.getInstance().getReference().child("20JAN2017.txt"); 
    System.out.println("......"+mStorageRef); 
    Uri url; 

    mStorageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { 
     @Override 
     public void onSuccess(Uri uri) 
     { 
      FileDownloadTask file = mStorageRef.getFile(uri); 

      file.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { 
        System.out.println("task snapshot..."+taskSnapshot.getStorage()); 
       } 
      }); 
      file.addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception e) { 
        System.out.println("Error:"+e); 

       } 
      }); 
      file.addOnCompleteListener(new OnCompleteListener<FileDownloadTask.TaskSnapshot>() { 
       @Override 
       public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) { 
        System.out.println("task completed"); 
       } 
      }); 
     } 
    }); 


} 
} 

Ошибка:

01-23 21:53:19.502 10974-11033/indian.stock.screener E/FileDownloadTask: Exception occurred during file download 
                     java.io.IOException: open failed: ENOENT (No such file or directory) 
                      at java.io.File.createNewFile(File.java:946) 
                      at com.google.firebase.storage.FileDownloadTask.run(Unknown Source) 
                      at com.google.firebase.storage.StorageTask$8.run(Unknown Source) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:841) 
                      Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
                      at libcore.io.Posix.open(Native Method) 
                      at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
                      at java.io.File.createNewFile(File.java:939) 
                      at com.google.firebase.storage.FileDownloadTask.run(Unknown Source)  
                      at com.google.firebase.storage.StorageTask$8.run(Unknown Source)  
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
                      at java.lang.Thread.run(Thread.java:841)  
01-23 21:53:19.712 10974-11033/indian.stock.screener E/StorageException: StorageException has occurred. 
                     An unknown error occurred, please check the HTTP result code and inner exception for server response. 
                      Code: -13000 HttpResult: 200 

Любая помощь будет принята с благодарностью.

+0

Где вы хотите сохранить файл? Поместите код, который показывает абсолютный путь для сохранения файла. – TOP

ответ

0
mStorageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { 
    @Override 
    public void onSuccess(Uri uri) { 
     FileDownloadTask file = mStorageRef.getFile(uri); 
     ... 
}); 

Является ли ваша проблема. getDownloadUrl() возвращает что-то вроде: https://firebasestorage.googleapis.com/..., в то время как аргумент getFile() ожидает, что локальная файловая система может решить file:///tmp/....

ContentResolver не может разрешить URL-адрес HTTPS, поскольку он не может записать URL (это не файл, к которому может обращаться файловая система).

Действительно, вы просто хотите использовать reference.getFile(/* appropriate local file */), вместо того, чтобы получать URL-адрес загрузки или загружать в память через getBytes() или getStream();

Смежные вопросы