用定时器显示“sorry”的提示对话框,单独用来提示正常,但用定时器来启动就出现问题。 代码如下,求高人指点:
定时器部分:  
      final Timer  mTimer = new Timer(true); 
        final TimerTask mTimerTask = new TimerTask() 
        {
             public void run()
             {
                    show_alert("sorry", null, "0K");
              }         
         };
    
      
     mTimer.schedule(mTimerTask, 4000);提示对话框部分:
private void show_alert(CharSequence title, String message, CharSequence button)
    {
     AlertDialog.Builder alert = new AlertDialog.Builder(this);
     alert.setTitle(title);
     alert.setMessage(message);
     alert.setPositiveButton(button, 
     new DialogInterface.OnClickListener() 
{
@Override
public void onClick(DialogInterface dialog, int i) 
{
;
}
});
     alert.show();
    } 

解决方案 »

  1.   

    Timer 要和 Handler 一起使用,代码如下:
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); Timer mTimer = new Timer(true);
    mTimer.schedule(new Task(), 4000);
    }

    private class Task extends TimerTask{
    @Override
    public void run() {
    Message msg = new Message();
            msg.arg1 = 1;
            handler.sendMessage(msg);
    }
    }

    private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
    switch(msg.arg1){
    case 1:
    show_alert("sorry", null, "0K");
    }
    super.handleMessage(msg);
    }
    }; private void show_alert(CharSequence title, String message,
    CharSequence button) {
    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle(title);
    alert.setMessage(message);
    alert.setPositiveButton(button, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int i) {
    ;
    }
    });
    alert.show();
    }
      

  2.   

    不能在非UI线程操作UI,因此要用handler配合显示,具体方法参见1楼
      

  3.   

               Timer timer = new Timer();      
                Handler handler = new Handler(){      
                 
                   public void handleMessage(Message msg) {      
                       switch (msg.what) {          
                       case 1:          
                            Intent intent=new Intent();   
                            intent.setClass(Bf_mech_lpener_1.this, bf_mech_1_1opener.class);   
                            startActivity(intent);   
                            Bf_mech_lpener_1.this.finish();      
                            break;          
                        }          
                        super.handleMessage(msg);      
               }      
                          
                };      
                TimerTask task = new TimerTask(){      
                 
                    public void run() {      
                        Message message = new Message();          
                        message.what = 1;          
                        handler.sendMessage(message);        
                    }      
                          
               };      
          
        @Override  
        public void onCreate(Bundle savedInstanceState)   
        {   
            super.onCreate(savedInstanceState);   
            SharedPreferences sp = getSharedPreferences("player_information",0);   
            strPlayerName=sp.getString("Player_name", "");   
            if(strPlayerName.equals(""))   
            {   
                setContentView(R.layout.bf_mech_opener_one);   
                OpenFlash = (ImageView) findViewById(R.id.bf_mech_open_light1);     
                OpenFlash.setBackgroundResource(R.anim.open_flash);    
                Open_animation = (AnimationDrawable) OpenFlash.getBackground();   
                //5秒钟后自动跳到下一个页面timer.schedule(task, 5000);      
                   
            }   
            else {   
                Intent intent=new Intent(Bf_mech_lpener_1.this,Home_2.class);   
                startActivity(intent);   
                Bf_mech_lpener_1.this.finish();      
            }   
               
        }   
        //按向上键,启动动画   
        public boolean onKeyUp(int KeyCode,KeyEvent event)   
        {   
            switch(KeyCode)   
            {   
              case KeyEvent.KEYCODE_DPAD_UP:   
                   Open_animation.start();   
                   break;          
            }   
            return true;   
               
        }   
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/TQUDING/archive/2010/08/06/5793067.aspx
      

  4.   

    正解,Android中需要配合Handler来实现Timer功能的,与我们平时Java的编写习惯有些差异