2016-07-04 5 views
0

テキストファイルを読み込んで最初の要素が1かどうかをチェックし、textview(TextViewDisk1)に表示して2のようにチェックするプログラムを作成しましたそれはうまく機能しましたが、最初の行だけでした。プログラムが次の行を読み取った後、アプリケーションは停止します。テキストファイルを読み込んで複数のテキストビューに一度に追加しないでください

logcat

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views

この問題を解決するにはどうすればよいですか?

コード

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

    //Read text file and show number on the textview 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      final TextView TextDisk1 = (TextView) findViewById(R.id.TextDisk1); 
      final TextView TextDisk2 = (TextView) findViewById(R.id.TextDisk2); 
      final TextView TextDisk3 = (TextView) findViewById(R.id.TextDisk3); 
      final TextView TextDisk4 = (TextView) findViewById(R.id.TextDisk4); 
      final TextView TextDisk5 = (TextView) findViewById(R.id.TextDisk5); 
       try { 
        InputStream stream = getAssets().open("Messwerte.txt"); 
        InputStreamReader reader = new InputStreamReader(stream); 
        BufferedReader buffer = new BufferedReader(reader); 
        String lines; 
        for (int i = 0; i < 2400; i++) { 

         lines = buffer.readLine(); 
         String[] line = lines.split("\t"); 
         String first = line[0]; 
         String second = line[1]; 
         String third = line[2]; 
         TextDisk3.setText(third); 
         if(first.equals("1")) 
         { 
          TextDisk1.setText(second); 
         } 

         else if(first.equals("2")) 
         { 
          TextDisk2.setText(second); 
         } 
         else if(first.equals("4")) 
         { 
          TextDisk4.setText(second); 
         } 

         else if(first.equals("5")) 
         { 
          TextDisk5.setText(second); 
         } 

         i++; 
         Thread.sleep(6000); 
        } 

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

    }).start(); 

答えて

0

あなたはrunOnuiThread(..)を使用する必要があるUIスレッドではないスレッドからのTextViewを変更する場合。あなたのファイルは、それがNullPointerExceptionがスローされます2400行でない場合ここで はexample.`

new Thread(new Runnable() { 
      @Override 
      public void run() { 

       final TextView TextDisk1 = (TextView) findViewById(R.id.TextDisk1); 
       final TextView TextDisk2 = (TextView) findViewById(R.id.TextDisk2); 
       final TextView TextDisk3 = (TextView) findViewById(R.id.TextDisk3); 
       final TextView TextDisk4 = (TextView) findViewById(R.id.TextDisk4); 
       final TextView TextDisk5 = (TextView) findViewById(R.id.TextDisk5); 
       try { 
        InputStream stream = getAssets().open("Messwerte.txt"); 
        InputStreamReader reader = new InputStreamReader(stream); 
        BufferedReader buffer = new BufferedReader(reader); 
        String lines; 
        for (int i = 0; i < 2400; i++) { 

         lines = buffer.readLine(); 
         String[] line = lines.split("\t"); 
         String first = line[0]; 
         String second = line[1]; 
         String third = line[2]; 
         WriteText(TextDisk3, third); 
         if (first.equals("1")) { 
          WriteText(TextDisk1, second); 
         } 

         else if (first.equals("2")) { 
          WriteText(TextDisk2, second); 
         } else if (first.equals("4")) { 
          WriteText(TextDisk4, second); 

         } 

         else if (first.equals("5")) { 
          WriteText(TextDisk5, second); 

         } 

         i++; 
         Thread.sleep(6000); 
        } 

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

     }).start(); 
    } 

    public void WriteText(final TextView textview, final String value) { 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       textview.setText(value); 
      } 
     }); 
    } 
} 

です。

関連する問題