2013-01-18 2 views
0

Я получаю неправильную ошибку потока, поэтому я думаю, что мне нужно выполнить недействительность из потока пользовательского интерфейса. Обычно у меня есть что-то вроде:Изменить код для запуска в потоке пользовательского интерфейса?

public void run() { 

       runOnUiThread(new Runnable() { 
}}); 

Но мне нужно назвать этот runnable ссылкой на него по методу. Как включить runOnUiThread в это?

Handler viewHandler = new Handler(); 
Runnable updateView = new Runnable() { 
@Override 

public void run() { 

    mEmulatorView.invalidate(); 

    if (statusBool == true) { 
     for (int i = 1; i < dataReceived.length() - 1; i++) { 

      if (dataReceived.charAt(i) == '>') { 

       Log.d(TAG, "found >"); 
       deviceStatus = 0; 
      } 
      if (dataReceived.charAt(i) == '#' 
        && dataReceived.charAt(i - 1) != ')') { 

       Log.d(TAG, "found #"); 
       deviceStatus = 1; 
      } 
      if ((i + 1) <= (dataReceived.length()) 
        && dataReceived.charAt(i) == ')' 
        && dataReceived.charAt(i + 1) == '#') { 

       Log.d(TAG, "found config)#"); 
       deviceStatus = 2; 
      } 

     } 
     statusBool = false; 
     viewHandler.postDelayed(updateView, 1000); 

    } 
} 
}; 

назвав его:

public void onDataReceived(int id, byte[] data) { 

     dataReceived = new String(data); 
     ((MyBAIsWrapper) bis).renew(data); 
     mSession.write(dataReceived); 
     viewHandler.post(updateView); 
} 
+1

Вы уверены, что используете это неправильно? Если вы разместите его в 'viewHandler' и' viewhandler' был создан на ui-потоке, тогда он не должен бросать такую ​​ошибку. –

+0

Можете ли вы отправить сообщение об ошибке здесь? –

+0

вот ошибка: http://i.imgur.com/s4mTt.png – Paul

ответ

1

Вам не нужно назвать его. Если вы хотите разместить себя, вы можете просто использовать ключевое слово this:

viewHandler.postDelayed(this, 1000); 

UPDATE

Неправильной ошибка нити вызванного mSession.write(dataReceived);. updateView не вызывает никаких проблем. Попробуйте обернуть mSession.write в runnable и называть его на нить ui.

+0

Спасибо, я попробую это сейчас, разве не возможно сделать оба? – Paul

1

Получил это, я просто должен был запустить эту строку записи в потоке пользовательского интерфейса, хотя я думал, что это так ?!

public void onDataReceived(int id, byte[] data) { 

     dataReceived = new String(data); 
     ((MyBAIsWrapper) bis).renew(data); 

     runOnUiThread(new Runnable(){ 
      @Override 
      public void run() { 
       mSession.write(dataReceived);  
      }}); 

     viewHandler.post(updateView); 
    } 
Смежные вопросы