2016-04-04 17 views
0

Temelde, bir parçası içinde bir TimerTask kullanmak gerekir ama bu hata ortaya çıkıyor:TimerTask Fagment içeride

04-04 15:01:02.710 28397-28528/com.example.sdilab.pap E/AndroidRuntime: FATAL EXCEPTION: Timer-1 
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
    at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5471) 
    at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1007) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.support.v4.widget.DrawerLayout.requestLayout(DrawerLayout.java:1255) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:334) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:334) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.view.View.requestLayout(View.java:15850) 
    at android.widget.TextView.checkForRelayout(TextView.java:6615) 
    at android.widget.TextView.setText(TextView.java:3753) 
    at android.widget.TextView.setText(TextView.java:3608) 
    at android.widget.TextView.setText(TextView.java:3583) 
    at com.example.sdilab.pap.StepsFragment$1.run(StepsFragment.java:87) 
    at java.util.Timer$TimerImpl.run(Timer.java:284) 

Ve bu kullanmak gerekir koddur:

timer.schedule(new TimerTask() { 
      public void run() { 
       double value = Double.parseDouble(readFromFile()); 
       String roundedvalue = Math.round(passos) + ""; 
       textView.setText(roundedvalue); 

      } 
     }, 0, 1*1000); 

Benim sorum : Bu kodu nasıl kullanabilirim/aynı sonucu elde edebilirim, böylece bu kodu parçamın içinde kullanabilirim?

cevap

1

Kullanım runOnUiThread() yöntem TextView

timer.schedule(new TimerTask() { 
       public void run() { 
        double value = Double.parseDouble(readFromFile()); 
        String roundedvalue = Math.round(passos) + ""; 

     runOnUiThread(new Runnable() { 
       public void run() { 
        textView.setText(roundedvalue); 
       } 
      }); 



       } 
      }, 0, 1*1000); 
+0

runOnUiThread'i kullanamıyorum, diyor ki: 'runOnUiThread (anonim java.lang.Runnable)' metodunu çözemiyorum ' –

+1

@ AntónioPaulo try getActivity(). RunOnUIThread –

0

senin sorunun ana iş parçacığı dışında görüşlerinizi güncellemeye çalışıyorum olmasıdır güncellemek için. Bununla başa çıkmanın kolay bir yolu, görüşlerinizi doğru şekilde güncellediğinizden emin olmak için bir işleyiciyi kullanmaktır. İşte bir örnek: aynı zamanda bir runOnUiThread() yöntemi yoktur

private Handler updateHandler = new Handler(); 

timer.schedule(new TimerTask() { 
     public void run() { 
      double value = Double.parseDouble(readFromFile()); 
      String roundedvalue = Math.round(passos) + ""; 
      updateHandler.postRunnable(new Runnable() { 
       public void run() { 
        textView.setText(roundedvalue); 
       } 
      }); 
     } 
    }, 0, 1*1000); 

, aynı yapacak, bir faaliyet içine ise.

İlgili konular