Как обновить текстовое представление, используя поток?

1

Я пытаюсь обновить textview через 3 секунды, и я хочу сделать это в цикле, для которого я использую thread..... что я должен сделать, чтобы запустить фоновый поток, чтобы точно через 3 секунды Запуск background1 начинается... и это должно быть сделано в цикле?

     package com.edu.math;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.widget.TextView;

    public class EduMath extends Activity {
        TextView txt;
        TextView tv;
        TextView num;
        String x;
        int time = 3000;
        float z ;


    int random;
            int random1;
            int random_operator =1;

    /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            txt=(TextView)findViewById(R.id.txt);
            tv = (TextView)findViewById(R.id.randomNumber);

            background.start();
        }

        // our handler
        Handler handler = new Handler() {
        public void handleMessage(Message msg) {//display each item in a single line

            random = (int)Math.ceil(Math.random()*10);
            random1 = (int)Math.ceil(Math.random()*10);

            if(random1>random)
            {
                txt.setText(/*txt.getText()+*/""+random1+" "+>+" "+random+" "+
System.getProperty("line.separator"));
            }
            else
            {
                txt.setText(/*txt.getText()+*/""+random+" "+>+" "+random1+
System.getProperty("line.separator"));
            }
        }
    };

    Handler handler1 = new Handler() {
        @Override
        public void handleMessage(Message msg) {//display each item in a single line


                txt.setText(/*txt.getText()+*/""+random1+" "+x+" "+random+System.getProperty("line.separator"));

        }
    };
    Thread background1 =new Thread(new Runnable() {

        @Override
        public void run() {

            for(int i=0;i<10;i++)
            {
                try {

                    Thread.sleep(time);
                    // send message to the handler with the current message handler          

                    handler1.sendMessage(handler1.obtainMessage());
                    background.stop();
                    Log.d("EduMath-enclosing_method", "thread started");
                } catch (Exception e) {
                    Log.v("Error", e.toString());
                }
            }

        }
    });


    Thread background=new Thread(new Runnable() {

        @Override
        public void run() {
            for(int i=0;i<10;i++)
            {
                try {
                    Thread.sleep(time);

        // send message to the handler with the current message handler          
                    handler.sendMessage(handler.obtainMessage());
                                        background1.start();
                } catch (Exception e) {
                    Log.v("Error", e.toString());
                }
            }
             }
    });
}
  • 0
    wats ur проблема выкидывает ошибка? или неправильный вывод?
  • 0
    моя проблема неверный вывод ...
Показать ещё 4 комментария
Теги:

4 ответа

1

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

0

Попробуйте решение на этом посту... похоже, то, что вы ищете http://androidgenuine.com/?p=707

0
public class HandlerDemo extends Activity {

ProgressBar bar;

Handler handler=new Handler() {
@Override
public void handleMessage(Message msg) {
    //add your text
}
};

AtomicBoolean isRunning=new AtomicBoolean(false);


public void onStart() {
   super.onStart();

   Thread background=new Thread(new Runnable() {
   public void run() {
    try {

           Thread.sleep(3000);
           handler.sendMessage(handler.obtainMessage());

}
catch (Throwable t) {
// just end the background thread
}
}
});
isRunning.set(true);
background.start();
}
public void onStop() {
super.onStop();
isRunning.set(false);
}
}
0

Попробуйте использовать java.util.Timer(http://download.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню