2016-12-24 2 views
0

У меня есть немного проблемы с поиском моей ошибки в приложении для Android.open failed: ENOENT (нет такого файла или каталога) внутреннее хранилище

Целью моей «ResultActivity» является создание файла во внутреннем хранилище, а затем загрузка файла с моего сервера (через FTP), а затем вызов следующего действия (GiftActivity).

Но когда следующее действие пытается получить доступ к этим файлам, я получаю указанную ошибку. Ничего нового, но интересная часть заключается в том, что если я убью приложение вручную и перезагрузив его, он будет работать как шарм в следующий раз.

Вот мой код:

ResultActivity.java:

//... 
ImageButton download = (ImageButton) findViewById(R.id.downloadCode); 
download.setBackgroundDrawable(null); 
assert download != null; 
download.setOnClickListener(new View.OnClickListener() {@ 
    Override 
    public void onClick(View v) { 
    new AsyncTask < Integer, Void, Void >() {@ 
     Override 
     protected Void doInBackground(Integer...params) { 
     try { 
      JSch jsch2 = new JSch(); 

      session = jsch2.getSession("xy", "1.2.3.4", 22); 
      session.setPassword("xyz123"); 
      //Set FTP Settings 
      java.util.Properties config = new java.util.Properties(); 
      config.put("StrictHostKeyChecking", "no"); 
      //Disables Fingerprint checking! 
      session.setConfig(config); 
      //load config to session 

      session.connect(); 

      //connect to the session 
      channel = session.openChannel("sftp"); 
      channel.connect(); 
      //open an SFTP Channel 
      channelSftp = (ChannelSftp) channel; 

      File checkExistance = getBaseContext().getFileStreamPath("code.txt"); 
      if (checkExistance.exists()) { 
      getBaseContext().deleteFile("code.txt"); 
      getBaseContext().deleteFile("usage.txt"); 
      } 

      File code = new File(getFilesDir().getAbsolutePath(), "code.txt"); 
      File usage = new File(getFilesDir().getAbsolutePath(), "usage.txt"); 

      code.createNewFile(); 
      usage.createNewFile(); 

      channelSftp.get("/home/code.txt", getFilesDir() + "/code.txt"); 
      channelSftp.get("/home/usage.txt", getFilesDir() + "/usage.txt"); 
     } catch (JSchException e) { 
      e.printStackTrace(); 
     } catch (SftpException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
     } 
    }.execute(1); 
    Intent intent = new Intent(ResultActivity.this, GiftActivity.class); 
    ResultActivity.this.startActivity(intent); 
    ResultActivity.this.finish(); 
    } 
}); 

GiftActivity.java:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_gift); 

     TextView actualCode = (TextView) findViewById(R.id.actualCode); 
     TextView actualUsage = (TextView) findViewById(R.id.usageCode); 
     String code = ""; 
     String usage = ""; 

     try { 

      FileInputStream fis = getBaseContext().openFileInput("code.txt"); 
      InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); 
      BufferedReader bufferedReader = new BufferedReader(isr); 
      StringBuilder sb = new StringBuilder(); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) { 
       sb.append(line).append("\n"); 
      } 
      code = sb.toString(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      code="error1"; 
     } 

     try { 
      FileInputStream fis = getBaseContext().openFileInput("usage.txt"); 
      InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); 
      BufferedReader bufferedReader = new BufferedReader(isr); 
      StringBuilder sb = new StringBuilder(); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) { 
       sb.append(line).append("\n"); 
      } 
      usage = sb.toString(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     usage="error2"; 
     } 
     actualCode.setText(code); 
     actualUsage.setText("you got a gift for " + usage + " congratulation!"); 
    } 

ответ

0

Я установил его, заменив:

File code = new File(getFilesDir().getAbsolutePath(), "code.txt"); 
File usage = new File(getFilesDir().getAbsolutePath(), "usage.txt"); 

code.createNewFile(); 
usage.createNewFile(); 

С:

File code = new File(getBaseContext().getFilesDir(), "code.txt"); 
File usage = new File(getBaseContext().getFilesDir(), "usage.txt"); 
Смежные вопросы