Ошибка NullPointerException при реализации API расположения на J2me

Я пытаюсь внедрить jsr-179 APi в телефон Nokia Symbian для периодического обновления местоположения с помощью setLocationListener через J2me. В эмуляторе все работает нормально. В то время как я установил Midlet на устройстве nokia 5230, ему выдается исключение NullPointerException, и приложение автоматически завершает работу. Какие могут быть возможные причины?

Ниже мой класс, я создаю объект для этого класса на форме в NetBeans

class MovementTracker implements LocationListener {

        LocationProvider provider;
        Location lastValidLocation;
        UpdateHandler handler;
        boolean done;

    public MovementTracker() throws LocationException
    {

    done = false;
    handler = new UpdateHandler();
    new Thread(handler).start();

        //Defining Criteria for Location Provider
       /*
        Criteria cr = new Criteria();
        cr.setHorizontalAccuracy(500);
       */


        //you can place cr inside getInstance
    provider = LocationProvider.getInstance(null);

        //listener,interval,timeout,int maxAge
        //Passing -1 selects default interval
       // provider.setLocationListener(MovementTracker.this, -1, -1, -1);
         provider.setLocationListener(MovementTracker.this, -1, 30000, 30000);

    }

    public void locationUpdated(LocationProvider provider, Location location)
    {
    handler.handleUpdate(location);
        batteryLevel = System.getProperty("com.nokia.mid.batterylevel");
        sn = System.getProperty("com.nokia.mid.networksignal");
        localTime =  System.currentTimeMillis();

        Send_Location();
    }

    public void providerStateChanged(LocationProvider provider, int newState)
    {
    }

    class UpdateHandler implements Runnable
    {
    private Location updatedLocation = null;

    // The run method performs the actual processing of the location

    public void run()
        {
        Location locationToBeHandled = null;
        while (!done)
            {
        synchronized(this)
                {
            if (updatedLocation == null)
                    {
            try
                        {
                wait();
            }
                        catch (Exception e)
                        {
                // Handle interruption
            }
            }
            locationToBeHandled = updatedLocation;
            updatedLocation = null;
        }

        // The benefit of the MessageListener is here.
        // This thread could via similar triggers be
        // handling other kind of events as well in
        // addition to just receiving the location updates.
        if (locationToBeHandled != null)
            processUpdate(locationToBeHandled);
        }
                try
                {
                    Thread.sleep(10000); //Sleeps for 10 sec & then sends the data
                }
                catch (InterruptedException ex)
                {
                }


    }

    public synchronized void handleUpdate(Location update)
        {
        updatedLocation = update;
        notify();
    }

    private void processUpdate(Location update)
        {
        latitude = update.getQualifiedCoordinates().getLatitude();
            longitude = update.getQualifiedCoordinates().getLongitude();
            altitude = update.getQualifiedCoordinates().getAltitude();

    }
    }
} 

1 ответ

Решение
public MovementTracker() throws LocationException

...
Я не написал никакого кода для обработки LocationException.

Никакой код не является очень опасной практикой, просто ищите в Интернете что-то вроде "исключений Java Swallow".

Вполне возможно, что из-за особенностей реализации Nokia выдает исключение LocationException, где эмулятор не выдает его. Поскольку вы не обрабатываете исключение, это может действительно привести к поломке мидлета в Nokia - и вы не будете знать причину этого, потому что, опять же, вы не написали код для его обработки.

Как я могу поймать это исключение?

Самое простое, что вы можете сделать, это отобразить Alert с сообщением об исключении и выйти из мидлета после того, как пользователь прочитает и отклонит предупреждение

Другие вопросы по тегам