Я пытаюсь бесконечно петлю поток, но он работает только один раз. Единственные решения, которые я смог найти, - это более старая версия Java, которая, похоже, больше не работает.Бесконечно Looping Thread в Android
Вот активность, которая начинается цикл:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread growCoin = new Thread(new GrowingCoin());
growCoin.start();
}
}
класс, который обрабатывает цикл:
public class GrowingCoin implements Runnable{
CoinTracker co = new CoinTracker();
boolean runGrowLoop = true;
public void run(){
try{
while(runGrowLoop == true){
co.copper = (int) (co.copper + (co.copper * 0.2));
MainActivity.coppertv.setText("Copper: " + co.copper);
Thread.sleep(1000);
Log.i("thread debug", "thread sleeping");
}
}
catch(Exception e){
}
}
}
Я предполагаю, что это что-то делать с классом CoinTracker не обновляется, потому что я Раньше у нас была аналогичная проблема, но если это так, я не знаю, как решить проблему.
Заранее благодарим за любые решения/попытки решения.
EDIT:
У меня очень мало опыта работы с LogCat, но я предполагаю, что тег System.err означает что-то важное, так вот все, что я получил от этого тега. Я не могу понять, что означает, что сообщение об ошибке:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6247)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:902)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:4637)
at android.view.View.invalidateInternal(View.java:11690)
at android.view.View.invalidate(View.java:11654)
at android.view.View.invalidate(View.java:11638)
at android.widget.TextView.checkForRelayout(TextView.java:6842)
at android.widget.TextView.setText(TextView.java:4047)
at android.widget.TextView.setText(TextView.java:3905)
at android.widget.TextView.setText(TextView.java:3880)
at me.test.first.GrowingCoin.run(GrowingCoin.java:13)
at java.lang.Thread.run(Thread.java:818)
Попробуйте зарегистрировать исключение в случае, если что-то странное произойдет внутри вашего цикла while. Лучше всего избегать тихих уловов! – LastFreeNickname
@LastFreeNickname Прошу прощения, я пропустил эту линию. Он настроен следующим образом: catch (исключение e) { \t \t \t e.printStackTrace(); \t \t} – Tertles
Возможно, вы получите исключение в MainActivity.coppertv.setText («Copper:» + co.copper); Обновляется ли текст один раз? –