Java для цикла не выполняется - PullRequest
0 голосов
/ 21 мая 2011

У меня проблемы с кодом обнаружения моего удаленного устройства для сканирования по Bluetooth. Он сканирует и печатает MAC-адреса, если я раскомментирую "system.out.print (devicesDiscovered);

Но я хочу иметь возможность извлечь каждый MAC-адрес из вектора и поместить его в строку.

У меня есть два разных цикла FOR для этого, но ни один из них, похоже, не выполняется.

Код:

import java.io.IOException;
import java.util.List;
import java.util.Vector;
import javax.bluetooth.*;

public class BluetoothDeviceDiscovery {

    public static final Vector/*<RemoteDevice>*/ devicesDiscovered = new Vector();

    public static void main() throws IOException, InterruptedException {

        final Object inquiryCompletedEvent = new Object();

        devicesDiscovered.clear();

        final DiscoveryListener listener = new DiscoveryListener() {

            public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {              
                devicesDiscovered.addElement(btDevice);

                //
                String testingAgain = devicesDiscovered.toString();
                System.out.println("What?? : " + testingAgain);

                /*
                * As far as i know, the following two FOR loops do the same thing
                * But both of them are not being executed...
                */

                //Its not executing this...
                for(int i=0; i< devicesDiscovered.size(); i++) {
                    System.out.println("test if this gets output");
                    String test = (String) devicesDiscovered.elementAt(i);
                    System.out.println("Test: " + test);
                }                
                //Its not executing this....
                for(int i=0; i> ((List) btDevice).size(); i++){
                    System.out.println("test if this gets output 1");
                    String testing = (String) devicesDiscovered.toString();
                    System.out.print("Test1: " + testing);
                }
                //Prints the MAC addresses [macaddress, macaddress, macaddress, etc]
               // System.out.println(devicesDiscovered);



                /*
                 * Now need to extract each macaddress from devicesDiscovered
                 * and convert from a Vector to a String
                 */
            }

            public void inquiryCompleted(int discType) {
                System.out.println("Device Inquiry completed!");
                synchronized(inquiryCompletedEvent){
                    inquiryCompletedEvent.notifyAll();
                }
            }

            public void serviceSearchCompleted(int transID, int respCode) {
            }

            public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
            }
        };

        synchronized(inquiryCompletedEvent) {
            boolean started = LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, listener);
            if (started) {
                System.out.println("wait for device inquiry to complete...");
                inquiryCompletedEvent.wait();
                System.out.println(devicesDiscovered.size() +  " device(s) found");
            }
        }

    }
}

Может кто-нибудь определить причину (ы), почему эти два цикла for не работают?

Большое спасибо - Райан

Ответы [ 2 ]

6 голосов
/ 21 мая 2011

В этой строке

//Its not executing this....
for(int i=0; i > ((List) btDevice).size(); i++) {

Вы повернули > в неправильном направлении ... попробуйте

for(int i=0; i < ((List) btDevice).size(); i++) {

вместо.

(Причина этогоне повторяется, потому что начальное значение 0 не превышает размер списка!)


В первом цикле:

//Its not executing this...
for(int i=0; i< devicesDiscovered.size(); i++) {
    System.out.println("test if this gets output");

оно должно бытьслучай, когда devicesDiscovered пуст.Я предлагаю вам сделать

System.out.println(devicesDiscovered.size());

до цикла отладки.

1 голос
/ 21 мая 2011

Выполнение вашего кода на моей машине выглядит следующим образом:

BlueCove версия 2.1.0 на bluez

дождитесь завершения запроса устройства ...

Что ?? : [...]

проверить, будет ли получен вывод

Тест: ...

Запрос устройства завершен!

1 найденных устройств

Завершение работы стека BlueCove

Со следующей петлей for:

for(int i=0; i< devicesDiscovered.size(); i++) 
{
    System.out.println("test if this gets output");
    String test = (String) devicesDiscovered.elementAt(i).toString();
    System.out.println("Test: " + test);
}

Я заметил, что вы тестировали, какой из циклов for генерировал желаемый результат. Я могу сказать, что вышесказанное работает, но второе создает исключение. Вы пытаетесь привести RemoteDevice объект к List и выполнить итерацию по нему (for(int i=0; i < ((List) btDevice).size(); i++)). Это причина не работает и, следовательно, исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...