[J2ME/Java]Problem z Location API

0

Witam
Juz jakiś czas pisze midlet (a raczej jego serce), który korzysta z wbudowanego w telefon GPS. Mam jednak mały problem bo caly czas pokazuje mi dwa błędy w czasie pracy na emulatorze (korzystam w pracy z NetBeans):
java.lang.IllegalStateException
lub taki:
java.lang.NullPointerException
Ale normalnie pojawia się okienko startowe (znaczy się pytanie aplikacji o możliwość używania odbiornika GPS.
Jest jednak drugi poważniejszy problem. Program nie chce się zainstalowac na telefonie. Korzystam z ustawień: MIDP-2.1 i CLDC-1.1, a chce to zainstalować na telefonie Nokia N95. W czasie instalacji pojawia się kounikat, że telefon jest niekompatybilny.

Bardzo bym prosil o pomoc.
Poniżej jeszcze kod, który może pomoże i przyspieszy diagnoze błędu:

import javax.microedition.midlet.*; 
import javax.microedition.location.*; 
import javax.microedition.lcdui.*; 
import java.lang.InterruptedException.*; 
import java.lang.Double.*; 

/** 
* @author Sebastian 
*/ 

public class GPS extends MIDlet implements CommandListener{ 
private Criteria cr; 
private LocationProvider provider; 
private Display dp; 
private Alert alert; 
private Location location; 
private Form dane; 
private StringItem lo, la, t1, t2; 
private List menu; 
private Command oKCommand; 


public GPS(){ 
// Criteria can be used to filter which GPS device to use. 
Criteria criteria = new Criteria(); 
criteria.setCostAllowed(true); 
criteria.setPreferredPowerConsumption(Criteria.NO_REQUIREMENT); 
oKCommand = new Command("Wybierz", Command.OK, 0); 
menu = new List("Menu", List.IMPLICIT); 
      menu.append("GPS",null); 
      menu.addCommand(oKCommand); 
      menu.setCommandListener(this); 

try{ 
// Get a location provider based on the aforementioned criteria. 
LocationProvider provider = LocationProvider.getInstance(criteria); 
Location location = provider.getLocation(180); 

Coordinates coordinates = location.getQualifiedCoordinates(); 

if (coordinates  != null) { 
    // Get the latitude and longitude of the coordinates. 
    double latitude = coordinates.getLatitude(); 
    double longitude = coordinates.getLongitude(); 
    dane = new Form("Dane GPS"); 
    String la = Double.toString(latitude); 
    String lo = Double.toString(longitude); 
    Spacer odstep = new Spacer(dane.getWidth(), 5); 
    t1 = new StringItem(null, "szerokosć:"); 
    t2 = new StringItem(null, "długość:"); 

    dane.append(t1); 
    dane.append(odstep); 
    dane.append(la); 
    dane.append(odstep); 
    dane.append(t2); 
    dane.append(odstep); 
    dane.append(lo); 

} else { 
    alert = new Alert("Brak współrzędnych", null, null, AlertType.WARNING); 
    alert.setTimeout(Alert.FOREVER); 
    dp.setCurrent(alert); 
} 

} 
catch(LocationException e0){ 
  System.out.println("Błąd");  
} 
catch (java.lang.InterruptedException e1) 
{ 
    alert = new Alert("Błąd nr1", null, null, AlertType.WARNING); 
    alert.setTimeout(Alert.FOREVER); 
    dp.setCurrent(alert); 
} 
catch (java.lang.SecurityException e2) 
{ 
    alert = new Alert("Błąd nr2", null, null, AlertType.WARNING); 
    alert.setTimeout(Alert.FOREVER); 
    dp.setCurrent(alert); 
} 
catch (java.lang.IllegalArgumentException e3) 
{ 
    alert = new Alert("Błąd nr3", null, null, AlertType.WARNING); 
    alert.setTimeout(Alert.FOREVER); 
    dp.setCurrent(alert); 
} 
catch (IllegalStateException e4) 
{ 
    alert = new Alert("Błąd nr4", null, null, AlertType.WARNING); 
    alert.setTimeout(Alert.FOREVER); 
    dp.setCurrent(alert); 
} 

// Get the coordinates of the current location. 

} 
    public void startApp() { 
        dp.setCurrent(menu); 
    } 

    public void pauseApp() { 
    } 

    public void destroyApp(boolean unconditional) { 
    } 
    public void commandAction(Command c,Displayable d){ 
        if (c == List.SELECT_COMMAND && d == menu) { 
        int indeks = menu.getSelectedIndex(); 
        String akcja = menu.getString(indeks); 
        if (akcja.equals("GPS")) { 
        dp.setCurrent(dane); 
        } 
    } 

}}

Będę bardzo wdzięczny za pomoc.

0

Program nie chce się zainstalowac na telefonie. Korzystam z ustawień: MIDP-2.1 i CLDC-1.1, a chce to zainstalować na telefonie Nokia N95. W czasie instalacji pojawia się kounikat, że telefon jest niekompatybilny.

Nokia N95 nie obsługuje MIDP 2.1 z tego co wiem, pewnie tu leży problem z instalacją.

0

Szczerze to jest to odpowiedź która mi w ogole nie pomogla (no dobra prawie) mnie bardziej interesuje jak naprawić to i pozostale blędy.

0

No widze, że chyba zadaje za trudne pytanie na forum bo jakos nikt nie potrafi na nie odpowiedzieć.
A mi sie wydawało, że to jakiś prosty błąd.

0

1.Napisz jakie linie kodu powodują wyjątek.

  1. W pliku JAD wpisz wymaganą wersję MIDP na 2.0. I sprawdź, czy nie wymagasz tam jakichś pakietów opcjonalnych, których nie ma N95.
0

To jest dokładny kod błędu:

java.lang.NullPointerException
        at GPS.<init>(GPS.java:97)
        at java.lang.Class.runCustomCode(+0)
        at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
        at com.sun.midp.midlet.Selector.run(Selector.java:151)

a odnosi się do tego fragmentu:

...catch (IllegalStateException e4)
{
    alert = new Alert("Błąd nr4", null, null, AlertType.WARNING);
    alert.setTimeout(Alert.FOREVER);
    dp.setCurrent(alert);
}...

Jednak sama ta linia kodu (97) to jest:
dp.setCurrent(alert);

A co do tego MIDP to się udało i mozna juz instalować na telefonie.

0
private Display dp;  // tutaj dp=null
.....
dp.setCurrent(alert); //zatem tutaj dp też jest nullem

Musisz "po drodze" odczytać lub skonstruować dp.

0

Dobra teraz juz nie pokazuje tego blędu. Ale teraz "pokazały sie dwie inne rzeczy.
1.W aplikacji jest kod, że przy starcie ma sie pokazać menu wyboru przy pomocy ktorego można wejść do menu w ktorym są współrzędne. No i tam da się wejść. Ale aplikacja powinna pokazywac i szerokośc i długośc. U mnie pokazuje tylko szerokość.
Chodzi o ten fragment:

double latitude = coordinates.getLatitude();
    double longitude = coordinates.getLongitude();
    dane = new Form("Dane GPS");
    String la = Double.toString(latitude);
    String lo = Double.toString(longitude);
    Spacer odstep = new Spacer(dane.getWidth(), 5);
    t1 = new StringItem(null, "szerokosć:");
    t2 = new StringItem(null, "długość:");

    dane.append(t1);
    dane.append(odstep);
    dane.append(la);
    dane.append(odstep);
    dane.append(t2);
    dane.append(odstep);
    dane.append(lo);

2.Zainstalowalem na telefonie, ale nie chce się w ogole uruchomic tylko mi telefon zwiesza. Jak sądzicie, czy gdybym spróbował sprawdzić ten program na aplikacji, która nie ma GPSa to by coś sie pojawiło czy by było tak samo.
Bo zapomnialem napisać, ale ten telefon jest telefonem testowym i ma rozwalonego GPSa jednak telefon docelowy (sony Ericsson C702) ma juz działający odbiornik tylko nie chcę na nim nic uruchamiać dopóki nie będę pewny, że wszytsko działa.
Stad moje pytanie również, czy winą za "zawieszenie" sytemu może ponosić awaria GPSa (zbyt długa próba pobrania danych z nadajnika?)?

0

Czy może ktoś mi pomóc??

0

Znowu widzę, że chyba za trudne pytanie zadaje. Czy nie ma na tym forum kogos, kto moglby mi pomóc?

0
sebap123 napisał(a)

Znowu widzę, że chyba za trudne pytanie zadaje. Czy nie ma na tym forum kogos, kto moglby mi pomóc?

Użyj mózgu albo zmień studia/prace!

1 użytkowników online, w tym zalogowanych: 0, gości: 1