我做了一个关于android定时器的东西,就是每秒让textviewi刷新一次。代码如下:
package com.timetry;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;import java.util.Timer;
import java.util.TimerTask;public class TimetryActivity extends Activity {
    /** Called when the activity is first created. */
private String tag = "@@@";
Timer timer = new Timer();
private int i = 0;
private TextView text = null;
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub   
super.handleMessage(msg);
int msgId = msg.what;
Log.e(tag, msgId + "");
switch (msgId)
{
case 1:
text.setText("one more per second" + i);
i++;
break;
default:
break;
}
}
};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text = (TextView)findViewById(R.id.text);
        setTimerTask();
    }
    @Override
    protected void onDestroy()
    {
     super.onDestroy();
     timer.cancel();
    }
    private void setTimerTask()
    {
     timer.schedule(new TimerTask()
     {
     @Override
     public void run()
     {
     Message message = new Message();
     message.what = 1;
     handler.sendMessage(message);
     }
     }, 0, 1000);    }
    
}
上面的代码可以运行。我改了下代码:如下
package com.timetry;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;import java.util.Timer;
import java.util.TimerTask;public class TimetryActivity extends Activity {
    /** Called when the activity is first created. */
private String tag = "@@@";
Timer timer = new Timer();
private int i = 0;
private TextView text = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text = (TextView)findViewById(R.id.text);
        setTimerTask();
    }
    @Override
    protected void onDestroy()
    {
     super.onDestroy();
     timer.cancel();
    }
    private void setTimerTask()
    {
     timer.schedule(new TimerTask()
     {
     @Override
     public void run()
     {
     text.setText("one more per second" + i);
    i++;
     }
     }, 0, 1000);    }
    
}
这样就不行了,运行的时候没显示,调试的时候会报 source not found。
这是怎么回事,我改的代码有问题吗?

解决方案 »

  1.   


    就是我要周期性的做一些事,比如我拿着手机走动,周期性的获得无线路由SSID,这些代码我一定写在handler中吗?
      

  2.   

    在线程中不对直接对View进行操作,需要通过Handler方式,修改代码即可package com.timetry;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.widget.TextView;import java.util.Timer;
    import java.util.TimerTask;public class TimetryActivity extends Activity {
       /** Called when the activity is first created. */
     private String tag = "@@@";
     Timer timer = new Timer();
     private int i = 0;
     private TextView text = null;
       @Override
       public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       text = (TextView)findViewById(R.id.tv1);
       setTimerTask();
       }
       @Override
       protected void onDestroy()
       {
       super.onDestroy();
       timer.cancel();
       }
       private void setTimerTask()
       {
       timer.schedule(new TimerTask()
       {
       @Override
       public void run()
       {
       Message message = new Message();
       message.what = 1;
       Bundle bundle = new Bundle();
       bundle.putString("msg", "one more per second" + i);
       message.setData(bundle);
       handler.sendMessage(message);
       i++;
       }
       }, 0, 1000);   }
       
       private Handler handler = new Handler()
       {
       @Override
       public void handleMessage(Message msg)
       {
       // TODO Auto-generated method stub   
       super.handleMessage(msg);
       int msgId = msg.what;
       Log.e(tag, msgId + "");
       switch (msgId)
       {
       case 1:
       Bundle bundle = msg.getData();
       text.setText(bundle.getString("msg"));
       i++;
       break;
       default:
       break;
       }
       }
       };
       
         
    }
      

  3.   

    你的方法可以,要在handler中处理,我现在又有个新问题,就是我在handler中处理wifi的东西,就是在
    case 1:下面添加如下代码:
    mWiFiManager01 = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
    mWiFiManager01.startScan();
    程序会报错,就是getSystemService这个函数不识别,我放在别的地方没问题阿。其实我想做的东西就是让手机周期性的搜索周围的无线路由。
      

  4.   

    mWiFiManager01 = (WifiManager) TimetryActivity.this.getSystemService(Context.WIFI_SERVICE);
    mWiFiManager01.startScan();
      

  5.   

    没问题,不报错,但是调试的时候执行到第二行:mWiFiManager01.startScan();的时候会 显示 source not found
      

  6.   

    mWiFiManager01 有没有定义在mainfest中