2015-06-16 2 views
0

Я пытаюсь прочитать текстовый файл из моего onedrive, мне нужно проверить версию базы данных и при необходимости обновить.android read textfile from web

Это пример моего кода:

private void checkVersion() { 

    try { 

     int dbversion = prefs.getInt("dbversion", 1); 
     int dblastversion; 


     URL url = new URL(""); 
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
     String str; 

     str = in.readLine(); 

     in.close(); 

     System.out.println(str); 

     dblastversion = Integer.valueOf(str); 

     if (dbversion < dblastversion) 
      System.out.println("updates available"); 

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

Когда я пытаюсь запустить сбой приложения, и я получил эту ошибку из LogCat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.example/com.ex.example.ActMenu}: android.os.NetworkOnMainThreadException 

На этой линии

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 

Кто-нибудь знает, в чем проблема? Или лучше использовать другое облако для хранения текстового файла. Спасибо за помощь.

UPDATE 2

Ok, как GPRathour сказал, что я обновил свой код к этому:

class Getversion_Async extends AsyncTask<Void, Void, Void> { 

    protected void onPreExecute() { 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     System.out.println("starting"); 
     try { 

      URL url = new URL("https://onedrive.live.com/redir?resid=b9186f8cb138a030!56556&authkey=!AFmrzOGv_OMArzo&ithint=file%2ctxt"); 
      BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
      String str; 

      str = in.readLine(); 

      in.close(); 

      System.out.println(str); 

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

     return null; 
    } 

    @Override 
    protected void onPostExecute(final Void unused) { 

     System.out.println("ended"); 

    } 
} 

И я заехать й OnCreate, как это тест:

new Getversion_Async().execute(); 

Хорошо это код работает нормально Я использую сайт для размещения файла, и ссылка заканчивается на .txt и работает отлично, но я не могу отредактировать файл. Кто-нибудь знает, как я могу это сделать с помощью onedrive?

+0

Не используйте System.out.println(), используйте Log.d ("значение", "закончилось"); –

+0

Я отредактировал вопрос agaig. –

ответ

1

Исключение четко указано android.os.NetworkOnMainThreadException. Чтобы прочитать файл с сервера, вам необходимо выполнить некоторую операцию в сети, и это не очень хорошая практика, чтобы выполнить его на Main Thread/UI Thread, так как он будет висеть на пользовательском интерфейсе до выполнения операции.

Что вам нужно сделать, это, запустите в AsyncTask

class LogoutUser_Async extends AsyncTask<Void, Void, Void> { 

     protected void onPreExecute() { 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 

      // Do your network task here 

      return null; 
     } 

     @Override 
     protected void onPostExecute(final Void unused) { 

      // Process the result 

     } 
} 
+0

Единственный способ использовать «Async Tank»? –

+0

@Azazel Что вам нужно сделать, выполните свою сетевую операцию в отдельном потоке. Возможно, это может сработать, создав простые потоки. Но лучший способ - создать «AsycnTask», я думаю. – gprathour

+0

Хорошо, спасибо за помощь. –