Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[Java] HttpConnection J2ME exceptions

Pagina: 1
Acties:

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
Op dit moment ben ik bezig met een Midlet waarbij ik gegevens van een webserver afhaal om die vervolgens om te zetten naar echte objecten. In de emulator werkt het, ofcourse, perfect. Objecten worden aangemaakt en ik kan er mee spelen in de midlet. Echter op de telefoon waarmee ik aan het testen ben (htc p3300 oftewel een orange m650) krijg ik een ioexception naar me toe geslingerd.

Het probleem hiervan is echter dat ik geen idee heb WAAROM dat deze ioexception opgegooid wordt. De getmessage ervan is hartstikke null en geeft dus geen zinnige informatie. Het enige dat ik vermoed is dat het bij het uitlezen van de inputstream fout gaat. Echter dat verklaart niet waarom het een IOException is en niet gewoon een nullpionter (als is om wat voor reden dan ook null zou zijn).

Wat ik ook raar vind is dat mijn statuslog wel aangeeft dat status.ok is terug gegeven door de HttpConnection dus er was/is connectie maar die kan niet uitgelezen worden om wat voor reden dan ook.

Iemand enig idee wat het zou kunnen zijn?

offtopic:
Wat gebeurt er eigenlijk als j2me zonder geheugen komt te zitten.. zou dat misschien de oorzaak zijn??


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
    private void doGetRequest() {
        DataInputStream is = null;
        HockeyManager.getInstance().statusForm.append("Doing Http GET");
        StringBuffer sb = new StringBuffer();
        int ch;

        for(int i = 0; i < this.objectsToProcess.size(); i++)
        {
            System.out.println("Process packet nr: "+i);
            
            HttpPacket packet = (HttpPacket)this.objectsToProcess.elementAt(i);
                    
            try {
                this.con = (HttpConnection)Connector.open(HockeyManager.getInstance().getConfigurationObject().getHostName()+packet.getUrl(),Connector.READ,true);
                this.con.setRequestMethod(HttpConnection.GET);
                HockeyManager.getInstance().appendToLog("Reading http response");
                is = this.con.openDataInputStream();
                    if(this.con.getResponseCode()==HttpConnection.HTTP_OK)
                    {
                        
                        HockeyManager.getInstance().appendToLog("Http connector response code : "+con.getResponseCode());
                        HockeyManager.getInstance().appendToLog("Http connector response message : "+con.getResponseMessage());

                    while((ch= is.read()) != -1)
                    {
                        HockeyManager.getInstance().appendToLog("Reading... ");
                        sb.append((char)ch);
                    }

                    packet.setResponseMessage(sb.toString());
                    packet.setResponseCode(this.con.getResponseCode());
                    packet.execute();
                    }else{
                        throw new IOException("Invalid response returned");
                    }
            }catch(ConnectionNotFoundException e){
                HockeyManager.getInstance().appendToLog("HttpConnector connection not found :"+e.getMessage());
            }catch(IllegalArgumentException e )
            {
                HockeyManager.getInstance().appendToLog("HttpConnector timeout io exception while opening input :"+e.getMessage());
            } catch (InterruptedIOException e) {
                HockeyManager.getInstance().appendToLog("HttpConnector timeout io exception while opening input :"+e.getMessage());             
            }catch( IOException e)
            {
                HockeyManager.getInstance().appendToLog("HttpConnector io exception while opening input :"+e.getMessage());
            } catch (RecordStoreNotOpenException e) {
                HockeyManager.getInstance().appendToLog("HttpConnector recordstore not open exception:"+e.getMessage());
            } catch (InvalidRecordIDException e) {
                HockeyManager.getInstance().appendToLog("HttpConnector invalididrecordstore exception:"+e.getMessage());
            } catch (RecordStoreException e) {
                HockeyManager.getInstance().appendToLog("HttpConnector recordstore:"+e.getMessage());
            }finally{
                try {
                    this.con.close();
                    sb.setLength(0);
                    
                } catch (IOException e) {
                    HockeyManager.getInstance().appendToLog("HttpConnector (finaly) io exception :"+e.getMessage());
                }
            }
            
            
        }
    }

Strava | AP | IP | AW


  • momania
  • Registratie: Mei 2000
  • Laatst online: 23:22

momania

iPhone 30! Bam!

En wat is de stacktrace van je exception? Nu doe je alles in 1 grote try-catch, dus zonder stacktrace is het voor ons natuurlijk lastig bepalen waar het fout zou kunnen gaan ;)

Neem je whisky mee, is het te weinig... *zucht*


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
momania schreef op zaterdag 13 september 2008 @ 17:54:
En wat is de stacktrace van je exception? Nu doe je alles in 1 grote try-catch, dus zonder stacktrace is het voor ons natuurlijk lastig bepalen waar het fout zou kunnen gaan ;)
Aangezien ik het een en ander op een formpje plant in j2me omdat ik op mijn telefoon geen console heb :

code:
1
2
3
4
5
Creating new Connection
Processing...
http connector response code: 200
Http connector response message : OK
Httpconnector io exception while opening input : null


Dus de e.getMessage() is ook nog eens leeg.

Strava | AP | IP | AW


  • momania
  • Registratie: Mei 2000
  • Laatst online: 23:22

momania

iPhone 30! Bam!

Dan je evengoed nog wel de stacktrace ipv de message printen toch?

Neem je whisky mee, is het te weinig... *zucht*


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
Als ik wist hoe dat te doen in J2me dan deed ik dat graag.

Exception.printStackTrace(outputstream) bestaat immers niet. en een toString geeft hetzelfde als mijn ' simpel ' logje.

[ Voor 51% gewijzigd door Webgnome op 13-09-2008 20:57 ]

Strava | AP | IP | AW


  • momania
  • Registratie: Mei 2000
  • Laatst online: 23:22

momania

iPhone 30! Bam!

Ik gok dat:

Java:
1
is = this.con.openDataInputStream();

Geen exception maar null geeft.

Deze 2 logregels:
code:
1
2
http connector response code: 200
Http connector response message : OK

is het laatste dat je ziet voor je exception, maar dat zijn calls direct op de connection.

Het eerste dat je daarna gebruikt is de inputstream, dus die zal dan wel null zijn :)

Verder bedoelde ik ook dat met alles in 1 groot try-catch block het lastig te tracen is. En met wat null checks moet je er volgens mij redelijk snel achter kunnen komen wat er mis gaat hier, want zo veel code is het nou ook weer niet ;)

Neem je whisky mee, is het te weinig... *zucht*


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
Ik heb de code nu een beetje voorzien van wat extra logcalls Hieruit blijkt dat Alles goed gaat tot aan het moment dat er gelezen moet gaan worden. Op het moment dat dat gebeurt (de while(read))wordt er een exception opgegooid (ioexception) die null terug geeft als zijn de getMessage van de exception.

als ik in dat catch blok vervolgens controleer of de inputstream null is dan komt daar uit dat dit variable een instance van InputStream bevat en dat he daar dus niet aan kan liggen. Ik vraag me echter af waar het dan wel aan ligt aangezien InputStream.read() zelf geen ioexception op kan gooien.

Tevens is het ook geen TimeoutException want dan was dit in een ander catch block opgevangen (ioexception staat niet voor niets onderaan het lijstje) en zag ik dus een totaal andere error en was ik waarschijnlijk ook nu al lang klaar geweest.

Strava | AP | IP | AW


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Heb je al gekeken of er nog iets van een errorcode in die exception zit?

Skill is when luck becomes a habit.


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
eek schreef op zondag 14 september 2008 @ 11:07:
Heb je al gekeken of er nog iets van een errorcode in die exception zit?
Euhm.. hoe ? aangezien e.getMessage() null returned.. En op j2me kun e dus niet zelf een printwriter gebruiken om de system messages af te vangen...

Strava | AP | IP | AW


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Webgnome schreef op zondag 14 september 2008 @ 12:01:
[...]


Euhm.. hoe ? aangezien e.getMessage() null returned.. En op j2me kun e dus niet zelf een printwriter gebruiken om de system messages af te vangen...
Met m'n PDA (Windows Mobile) kan ik rechtstreeks debuggen vanaf de computer naar m'n PDA.

Dus als ik op de PDA een fout krijg pauzeert die, en gaat die naar de corresponderende regel in m'n code op m'n desktop. En dan kan ik de stack uitlezen.

Gaat dat niet met J2ME?

Going for adventure, lots of sun and a convertible! | GMT-8


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
Helaas is dat nog niet mogelijk , zover ik weet, met mijn Htc p3300.

Strava | AP | IP | AW


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 21:20
Gebruik je Intent MIDlet Manager? Daar kan ik heel weinig informatie over vinden voor 'On Device Debugging', helaas.

Met een Nokia N70 is het me wel gelukt, met RedMIDlet en EcmtAgent, maar dat is alleen voor S60 telefoons.

Het is trouwens geen oplossing, maar je zou misschien ook een andere Java kunnen proberen. Voor Windows Mobile heb je Esmertec en Intent.

[ Voor 23% gewijzigd door Jaap-Jan op 14-09-2008 12:47 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
Ik gebruik inderdaad de standaard Intent midlet manager. Een andere java is helaas inderdaad geen oplossing aangezien het een klein thuis project is.

offtopic:
Als dit echt gaat werken kan ik alsnog alles in de Recordstores opslaan. Of ik xml nou uit een recordstore haal of van het web is voor de verder werking van het programma natuurlijk niet van belang het zou alleen een stuk leuker zijn aangezien ik al een kleine rest service in elkaar heb zitten flansen etc :)

Strava | AP | IP | AW


  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 22-09 14:46

Wijnbo

Electronica werkt op rook.

Kijk es naar J2MEPolish, daar zitten dingen als RMI, hoef je niet zelf moeilijk te doen met HttpConnection, en kun je gewoon objecten van je server naar je telefoon kieperen en andersom :)

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:33
Ik heb naar J2ME polish gekeken maar wilde eerst een applicatie in elkaar zetten die alleen maar gebruik maakt van de J2me Api's ( midp etc) om daarna misschien dat te gaan gebruiken. Echter zie ik nu nog niet de noodzaak in van J2MEpolish in mijn project.

Het is naar mijn bescheiden mening een erg bloated framework en ik zou er misschien 1/10 van gebruiken. Kan ik beter het hele zaakje zelf in elkaar knopen en iets van leren. (dat was het originele doel).

Maar even een update op mijn probleem. Op een of andere manier is het probleem nu als sneeuw voor de zon verdwenen. Ik kan via GPRS connecten naar mijn home servertje (direct ip ) en gegevens eraf halen lukt ook allemaal. Echter als ik naar mijn website (bij een prof hoster neer gezet) wil connecten dan krijg ik het probleem dat ik in dit topic heb aangekaart. Kan dat misschien zijn omdat het geen dedicaed hosting is maar gewoon een hosting pakketje bij een hoster en dat daardoor er allerlei redirects naar mijn connecite worden geslingerd?

Maar goed het werkt nu met mijn eigen servertje. Dan weet ik in ieder geval dat het niet aan mijn telefoon ligt. Kunnen we weer verder met stap 2... Testen op de telefoon en oplossen van de problemen uit de usertest.

offtopic:
En wtb eletronica en rook.. helemaal gelijk :D

Strava | AP | IP | AW

Pagina: 1