2017-01-24 19 views
0

AndroidとFirebaseを初めて使用しています。基本的にFirebaseからファイルをダウンロードしてAndroidストレージに保存しようとしていますが、奇妙なエラー"ENOENT: No such file or directory error"が発生しています。私はまた、ストレージの書き込み許可を持っています。Firebase Text Fileダウンロードエラー

コード:

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を解決できません(ファイルシステムでアクセスできるファイルではありません)。

実際には、ダウンロードURLを取得する代わりにreference.getFile(/* appropriate local file */)を使用するか、getBytes()またはgetStream()でメモリにダウンロードしてください。

関連する問題