2016-03-29 4 views
0

におけるネットワークのメイン例外私はHTMLからtabs名を変更するには、このコードをしましたが、私はこのエラーを得た:アンドロイド:スレッド

android.os.NetworkOnMainThreadException 
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork 

私はあなたがmainthreadnetworks操作を行うことはできません知っているが、ここで私runOnUiThreadを使用してください。このエラーになるはずです。

Thread thread = new Thread() 
      { 
       @Override 
       public void run() { 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() 
         { 
          try 
          { 
           Document doc = Jsoup.connect("http://terry.gonguet.com/cal/?g=tp11").get(); 
           Elements days = doc.select("div.day"); 

           for (Element day : days) 
           { 
            String jour = day.getElementsByClass("dayDate").first().html(); 

            mSectionsPagerAdapter.AddFragment(new MainFragment().newInstance(1), jour); 



           } 
          }catch (IOException ex){} 
         } 
        }); 
       } 
      }; 
      thread.start(); 
+0

UIスレッドは、メインスレッドは、UIスレッドであるメインスレッド – flakes

+0

ですあなたはそこでネットワーク操作をしてはいけません。 – leonziyo

+0

'runOnUiThread'を使用すると、メインスレッド上で実行されます。それが 'runOnUiThread'のやり方です。代わりにAsyncTaskを使用してみてください。 – JonasCz

答えて

0

I know you can't do networks operations on the main thread

runOnUiThreadは、メインスレッド上で実行されますので、あなたは明らかにメインスレッドでネットワーク運用を行っている、あなたは、ネットワーク接続されたJsoup.connectを呼んでいます。

Threadよりも好ましいAsyncTaskを作成する必要があります。長期的な仕事をしている場合を除きます。

0

インターフェイスがネットワーク操作の終了までフリーズするため、UIスレッドでネットワーク操作を実行することはできません。この操作にはAsyncTaskを使用できます。この操作のための完璧なソリューションです。 AsyncTaskを使用すると、ネットワーク操作を実行し、ネットワーク操作後(およびその間にも)のUIを更新できます。たとえば:

new AsyncTask<String, String, Elements>(){ 

     @Override 
     protected Elements doInBackground(String... params) { 
      Document doc = Jsoup.connect("http://terry.gonguet.com/cal/?g=tp11").get(); 
      Elements days = doc.select("div.day"); 

      return days; 
     } 

     @Override 
     protected void onPostExecute(Elements days) { 

      for (Element day : days) { 
       String jour = day.getElementsByClass("dayDate").first().html(); 

       mSectionsPagerAdapter.AddFragment(new MainFragment().newInstance(1), jour); 
      } 
      } 
    }.execute(); 
0

あなただけのUIスレッド内の断片を追加する必要がありますが、要求はそう、この作業をする必要がありません。

Thread thread = new Thread() { 
    @Override 
    public void run() {  
     try 
     { 
      Document doc = Jsoup.connect("http://terry.gonguet.com/cal/?g=tp11").get(); 
      Elements days = doc.select("div.day"); 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() 
       { 
        for (Element day : days) 
        { 
         String jour = day.getElementsByClass("dayDate").first().html(); 

         mSectionsPagerAdapter.AddFragment(new MainFragment().newInstance(1), jour); 



        } 

       } 
      }); 
     } catch (IOException ex){}   
    } 
}; 
thread.start(); 
関連する問題