2016-06-24 10 views
0

Ich bin nicht in der Lage, eine PDF-Datei von einer URL in Android-Speicher heruntergeladen zu schreiben. Ich habe alle verwandten Fragen auf dieser Website gelesen, kann aber immer noch nicht herausfinden, was mit meinem Code nicht stimmt.Kann nicht auf externe Speicher schreiben Android

Fehler ist in pdfFile.createNewFile(); drinnen versuche {} block.

private class DownloadFile extends AsyncTask<String, Void, Void> { 

     @Override 
     protected Void doInBackground(String... strings) { 
      String fileUrl = strings[0]; 
      String fileName = strings[1]; 
      String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
      File folder = new File(extStorageDirectory, "/test/"); 
      folder.mkdirs(); 

      File pdfFile = new File(folder, fileName); 

      try{ 
       pdfFile.getParentFile().mkdirs(); 
       pdfFile.createNewFile(); 
      }catch (IOException e){ 
       e.printStackTrace(); 
      } 
      FileDownloader.downloadFile(fileUrl, pdfFile); 
      return null; 
     } 

Mein Logcat

06-24 19:11:26.886 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err: java.io.IOException: open failed: ENOENT (No such file or directory) 
06-24 19:11:26.886 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.io.File.createNewFile(File.java:939) 
06-24 19:11:26.886 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at in.ac.iitd.bsw.iitdapp.VolleyDownload$DownloadFile.doInBackground(VolleyDownload.java:112) 
06-24 19:11:26.888 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at in.ac.iitd.bsw.iitdapp.VolleyDownload$DownloadFile.doInBackground(VolleyDownload.java:96) 
06-24 19:11:26.888 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
06-24 19:11:26.888 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
06-24 19:11:26.889 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
06-24 19:11:26.889 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
06-24 19:11:26.889 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
06-24 19:11:26.889 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.lang.Thread.run(Thread.java:818) 
06-24 19:11:26.889 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
06-24 19:11:26.889 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at libcore.io.Posix.open(Native Method) 
06-24 19:11:26.890 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
06-24 19:11:26.890 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.io.File.createNewFile(File.java:932) 
06-24 19:11:26.890 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  ... 8 more 
06-24 19:11:26.890 22920-22999/in.ac.iitd.bsw.iitdapp W/System: ClassLoader referenced unknown path: /system/framework/tcmclient.jar 
06-24 19:11:27.040 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err: java.io.FileNotFoundException: /storage/emulated/0/test/maven.pdf: open failed: ENOENT (No such file or directory) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:452) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.io.FileOutputStream.<init>(FileOutputStream.java:87) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.io.FileOutputStream.<init>(FileOutputStream.java:72) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at in.ac.iitd.bsw.iitdapp.FileDownloader.downloadFile(FileDownloader.java:27) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at in.ac.iitd.bsw.iitdapp.VolleyDownload$DownloadFile.doInBackground(VolleyDownload.java:116) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at in.ac.iitd.bsw.iitdapp.VolleyDownload$DownloadFile.doInBackground(VolleyDownload.java:96) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
06-24 19:11:27.041 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
06-24 19:11:27.042 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at java.lang.Thread.run(Thread.java:818) 
06-24 19:11:27.042 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
06-24 19:11:27.043 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at libcore.io.Posix.open(Native Method) 
06-24 19:11:27.043 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
06-24 19:11:27.043 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:438) 
06-24 19:11:27.043 22920-22999/in.ac.iitd.bsw.iitdapp W/System.err:  ... 11 more 

ich die Erlaubnis, in Android Manifest richtig eingestellt haben

+0

https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it – CommonsWare

+0

Danke @CommonsWare –

Antwort

0

ich es auf meinem Gerät testete mit Android 6.0 Eibisch, die zusätzliche Berechtigungen erfordert sensible Daten zuzugreifen.

Kredit - @CommonsWare Android permission doesn't work even if I have declared it

Dieses Verfahren verwendet werden können Benutzer-Berechtigungen zu fragen. Ursprüngliche Antwort - https://stackoverflow.com/a/33162451/4420961

public boolean isStoragePermissionGranted() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       == PackageManager.PERMISSION_GRANTED) { 
      Log.v(TAG,"Permission is granted"); 
      return true; 
     } else { 

      Log.v(TAG,"Permission is revoked"); 
      ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
      return false; 
     } 
    } 
    else { //permission is automatically granted on sdk<23 upon installation 
     Log.v(TAG,"Permission is granted"); 
     return true; 
    } 


} 
0

Bitte versuchen Sie dies.

private class DownloadFile extends AsyncTask<String, Void, Void> { 
    @Override 
    protected Void doInBackground(String... strings) { 
     String fileUrl = strings[0]; 
     String fileName = strings[1]; 
     String extStorageDirectory = Environment.getExternalStorageDirectory().getPath() + "/test/"; 
     File folder = new File(extStorageDirectory); 
     if (!folder.exists()) { 
      folder.mkdirs(); 
     } 
     fileName = extStorageDirectory + fileName; 
     File pdfFile = new File(fileName); 

     try{ 
      pdfFile.createNewFile(); 
     }catch (IOException e){ 
      e.printStackTrace(); 
     } 
     FileDownloader.downloadFile(fileUrl, pdfFile); 
     return null; 
    }