2015-03-10 2 views
0

Я пытаюсь прочитать файл i, загружаемый из Dropbox (используя Dropbox CORE API).Проблемы с чтением .txt-файла в Android

private void downloadropboxfile(final String filename) 
{ 
    Thread thread = new Thread(new Runnable(){ 
     @Override 
     public void run() { 
      try { 
       File file = new File(getCacheDir(),filename); 
       if(!file.exists()) 
        file.createNewFile(); 
       FileOutputStream outputStream = new FileOutputStream(file); 

       DropboxAPI.DropboxFileInfo info=mDBApi.getFile("/" + filename, null, outputStream, null); 


      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    thread.start(); 

} 

Затем в другой функции я вызываю функцию uploaddropbox и пытаюсь прочитать содержимое файла в событии Onclick.

String filename = "info.txt"; 

    downloadropboxfile(filename); 
    String strLine = ""; 
    try { 
     InputStream instream = new FileInputStream(new File(getCacheDir(),filename)); 
     InputStreamReader inputreader = new InputStreamReader(instream); 
      BufferedReader bReader = new BufferedReader(inputreader); 

     /** Reading the contents of the file , line by line */ 
     while ((strLine = bReader.readLine()) != null) { 
      mTestOutput.setText(strLine); 
     } 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Моя проблема в том, что я не получаю содержимое файла немедленно. Мне нужно нажать кнопку 3-4 раза, чтобы прочитать содержимое файла. В чем проблема с моим кодом?

+0

Если он подключен к сети, следует ожидать задержки. Нажимает кнопку, а затем ждет какое-то время? –

+0

Я проверил это, и я думаю, что это не про сетевую задержку. Я получаю данные после нескольких щелчков мыши. – strategos

ответ

0

Вы звоните downloaddropboxfile, который начинает новый поток для загрузки файла. Но затем вы сразу же пытаетесь прочитать локальный файл (до его загрузки).

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

+0

Как это сделать? Как я могу прежде всего ждать завершения загрузки, а затем читать из локального файла? – strategos

+0

Должен ли я использовать AsyncTask с doinbackground и onpostexecute функциями? – strategos

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