首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AP扫描与OnClickListener

AP扫描与OnClickListener
EN

Stack Overflow用户
提问于 2013-08-05 10:43:58
回答 1查看 191关注 0票数 0

我已经写了一段代码:

代码语言:javascript
复制
public class WifiActivity extends Activity {

    private ListView listeViewWifi;
    private List<WifiItem> listeWifiItem;
    private WifiAdapter wifiAdapter;
    private WifiManager wifiManager;
    private WifiBroadcastReceiver broadcastReceiver;
    private Timer timer;
    private Timer2 timer2;
    private boolean success;
    private boolean broadcastFinish;
    private Button buttonMeasure;
    private Button buttonLocate;
    private EditText coordX;
    private EditText coordY;
    private float[][][] radioMap = new float[100][100][5];




    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_wifi);
       listeViewWifi = (ListView) findViewById(R.id.listViewWifi);
           wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

               if(wifiManager != null){
                   wifiManager.startScan();}

                       // On récupère le service WiFi d'Android
                       wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

                       // Gestion de la liste des AP WiFi (voir tuto sur les adapters et les
                       // listviews)
                       listeWifiItem = new ArrayList<WifiItem>();
                       wifiAdapter = new WifiAdapter(this, listeWifiItem);
                       listeViewWifi.setAdapter(wifiAdapter);

                       // Création du broadcast Receiver
                       broadcastReceiver = new WifiBroadcastReceiver();

                       // On attache le receiver au scan result
                       registerReceiver(broadcastReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
                       timer = new Timer(this);
                       timer.applyTimer();

                       [...]


            public void tempsFini(){

                broadcastFinish = WifiBroadcastReceiver.getBroadcastFinish();
                Log.d("info3","broadcastFinish (activity) : " + broadcastFinish);
                 if(broadcastFinish == true){
                     success = false;
                    while(success==false){
                    success=wifiManager.startScan();
                        Log.d("info2","startScan : " + success);
                    }   
                }
            }

然后是timer方法:

代码语言:javascript
复制
public class Timer {

    private WifiActivity activity;
    private Handler h = new Handler();
    private Runnable run = new Runnable() {
        @Override
        public void run() {
            Log.d("info3","timer");
                activity.tempsFini();   //on met à jour le truc wifi
                h.postDelayed(this, 200); //Donc revient toutes les 200ms
            }
        }
    ;

    public Timer(WifiActivity wifiActivity){
        activity = (WifiActivity) wifiActivity;
    }

    public void applyTimer() {
        h.postDelayed(run, 0); //run est en fait vraiment instancié ici
    }

    public void cancelTimer(){
        h.removeCallbacks(run);
    }
}

这个程序运行。我做了一些改变,因为我想做AP扫描时,我点击一个按钮。

代码语言:javascript
复制
buttonMeasure = (Button) findViewById(R.id.buttonMeasure);

buttonMeasure.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        //Envoyer une moyenne de mesure pour chaque RSSI

       Log.d("info7","onClick");

       coordX = (EditText) findViewById(R.id.coordX);
       coordY = (EditText) findViewById(R.id.coordY);

       String xString = coordX.getText().toString();
       final int xInt = Integer.parseInt(xString);

       String yString = coordY.getText().toString();
       final int yInt = Integer.parseInt(yString);

       timer2 = new Timer2(this); //****

       while(WifiBroadcastReceiver.getMeasureFinished()<=49){
           Log.d("info7","mesure" + WifiBroadcastReceiver.getMeasureFinished());


           timer2.applyTimer(); 
       }

       for(int i=0;i<=4;i++){
           radioMap[xInt][yInt][i]=WifiBroadcastReceiver.getRSSI(i);
       }
    }
});

方法timer2与计时器相同,我刚刚更改了:

代码语言:javascript
复制
public Timer2(OnClickListener onClickListener){
    activity = (WifiActivity) onClickListener; //****
}

但现在密码不起作用了。Logcat在我注释了**的行上显示了错误。

你知道我怎样才能着手解决这个问题吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-05 10:50:21

不能将OnClickListener传递给活动。而不是

代码语言:javascript
复制
timer2 = new Timer2(this);

用途:

代码语言:javascript
复制
timer2 = new Timer2(WifiActivity.this);

让你的功能像以前一样:

代码语言:javascript
复制
public Timer2(WifiActivity wifiActivity){
    activity = (WifiActivity) wifiActivity;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18056252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档