2017-03-06 95 views
0

我对Android 6的问题感到疯狂。从服务器下载pdf文件(在localhost中运行。服务器响应是HTTP 200(因此未发现问题),但是当我尝试打开该文件得到了错误:“错误的文件无法访问”Android 6:无法访问错误文件

这是Asynctack其下载文件:我尝试在onCreate方法来打开PdfFile

private class DownloadContent extends AsyncTask<String,Integer,String> { 
    private Context context; 
    private PowerManager.WakeLock mWakeLock; 
    private String ris; 

    public DownloadContent(Context context) { 
     this.context = context; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String nomefile=params[0]; 
     String email=params[1]; 
     String id=params[2]; 
     InputStream input = null; 
     String[] saveFiles; 
     OutputStream output = null; 
     HttpURLConnection connection = null; 
     try { 
      URL url = new URL("http://192.168.1.8:8080/com.appcampus/rest/content/"+nomefile+"/"+email+"/"+id); 

      connection = (HttpURLConnection) url.openConnection(); 
      connection.connect(); 

      if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { 
       return "Server returned HTTP " + connection.getResponseCode() 
         + " " + connection.getResponseMessage(); 
      } 

      int fileLength = connection.getContentLength(); 

      // download the file 
      java.io.File xmlFile = new java.io.File(Environment 
        .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 
        + "/"+nomefile); 
      input = connection.getInputStream(); 
      int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), 
        Manifest.permission.WRITE_EXTERNAL_STORAGE); 
      if(permissionCheck == PackageManager.PERMISSION_GRANTED){ 


      output = new FileOutputStream(xmlFile); 
      byte data[] = new byte[4096]; 
      long total = 0; 
      int count; 
      while ((count = input.read(data)) != -1) { 
       // allow canceling with back button 
       if (isCancelled()) { 
        input.close(); 
        return null; 
       } 
       total += count; 
       // publishing the progress.... 
       if (fileLength > 0) // only if total length is known 
        publishProgress((int) (total * 100/fileLength)); 
       output.write(data, 0, count); 

      } 
      }else{ 
       Log.d("Permission check",""+permissionCheck); 
      } 

      saveFiles = context.fileList(); 
      String s = ""; 
      for (String element : saveFiles) { 
       s += " " + element; 
      } 

      ris = "Server returned HTTP " + connection.getResponseCode(); 
     } catch (Exception e) { 
      return e.toString(); 
     } finally { 
      try { 
       if (output != null) 
        output.close(); 
       if (input != null) 
        input.close(); 
      } catch (IOException ignored) { 
      } 

      if (connection != null) 
       connection.disconnect(); 
     } 
     return ris; 
    } 
} 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      String risultato = ""; 
      Uri path = null; 
      try { 
       path = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"SisDisQuestion.pdf")); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      DownloadContent downloadTask = new DownloadContent(MainActivity.this); 
      try { 

       Log.d("DOWNOALD","Sono entrato in download content"); 
       String[] param = {"SisDisQuestion.pdf","a","91"}; 
       risultato = downloadTask.execute(param).get(); 
       Log.d("DOWNLOAD", risultato); 
       Snackbar.make(view, risultato, Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
       // Intent i = new Intent(SingleContentActivity.this, Main2Activity.class); 
       //startActivity(i); 

      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       e.printStackTrace(); 
      } 


      // if(risultato.equals("HTTP 200")){ 
       Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
       pdfIntent.setDataAndType(path, "application/pdf"); 
       pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       pdfIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       getApplicationContext().startActivity(pdfIntent); 

      // } 

     } 
    }); 
} 

我认为在清单的所有权限都OK:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
<!-- To retrieve the account name (email) as part of sign-in: --> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<!-- To auto-complete the email text field in the login form with the user's emails --> 
<uses-permission android:name="android.permission.READ_PROFILE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
+0

那么原始文件有多少字节?和多少下载ond。人物! – greenapps

+0

'risultato = downloadTask.execute(param).get();'。代码不正确。不要使用.get()方法。而是处理onPostExecute()中的doInBackground()的结果。表现正常。 – greenapps

+0

我试图处理onPostExecute中的结果,但没有更改。该请求返回HTTP 200. 我试图用文件资源管理器找到该文件,但无法在我的设备上找到它。这怎么可能? – mary

回答

0

最后我找到了解决办法:我添加的文件:///在我想要打开的文件的路径。

Uri path = Uri.parse("file:///"+Environment 
        .getExternalStorageDirectory().toString() 
        + "/YOURFILE.pdf"); 
相关问题