2010-06-08 6 views
0

J'ai lu quelques articles similaires sur ce site qui traitent de ce qui semble être le même problème et les réponses n'ont pas vraiment semblé clarifier les choses pour moi.L'application Blackberry fonctionne dans un simulateur mais pas dans un appareil

Mon application fonctionne correctement dans le simulateur. Je crois que je suis sur Bold 9000 avec OS 4.6. L'application est signée.

Mon application fait un appel HTTP via 3G pour aller chercher un résultat XML. type est application/xhtml + xml. Dans l'appareil, il n'y a pas d'erreur. il ne fait aucun signe visuel d'erreur. Je dis à l'essai d'attraper pour imprimer les résultats à l'écran et je n'ai rien. HttpConnection a été retiré des démos et fonctionne très bien dans sim. Puisqu'il n'y a pas d'erreur, je commence à réfléchir aux choses dont je me souviens avoir lu au début du projet. deviceside = true? Quelque chose comme ca? Ma demande est simplement HttpConnection connection = (HttpConnection) Connector.open (url); où url est juste une url standard, pas de vars. Basé sur le temps que je vois les flèches de connexion dans le coin de l'écran, je suppose que l'application lance la communication initiale à mon serveur, soit obtenir un mauvais résultat, ou il obtient des résultats et le magasin persistant ne fonctionne pas comme prévu.

Je ne sais pas par où commencer. La publication de code serait ridicule puisque ce serait essentiellement mon application entière. Je suppose que ma question est de savoir si quelqu'un connaît des différences majeures avec le dispositif par rapport au simulateur qui pourraient causer une défaillance de la connexion http ou du stockage persistant? Un paramètre de construction? Une restriction de système d'exploitation? N'importe quelle procédure standard que je ne savais tout simplement pas que tout le monde devrait faire avant de commencer le test de l'appareil?

Merci

+0

Veuillez revenir en arrière et indiquer que certaines des réponses à vos autres questions sont correctes. Les gens seront plus susceptibles d'aider. –

+0

Merci. Je n'ai pas remarqué que je pouvais faire ça. La plupart de mes questions n'ont pas vraiment de réponses directes. Est-il habituel sur ce site de créditer la réponse à la personne qui m'a indiqué la bonne direction, malgré que la réponse ne soit pas vraiment ce qui était nécessaire? Je ne veux pas créditer mes propres réponses car je publie habituellement la solution à mes propres problèmes si je les découvre. – Kai

+0

Il serait préférable de simplement modifier votre question originale avec la solution que vous avez trouvé. Si vous utilisez une réponse, elle peut être enterrée parmi les autres réponses qui ont été soumises (le cas échéant). –

Répondre

3

simplement fournir l'URL ne fonctionnera pas. Vous devrez ajouter quelques informations après l'URL pour déterminer la méthode de transport que votre connexion HTTP utilisera. Par exemple, http://example.com;deviceside=true utilisera DirectTCP (vous devrez peut-être également fournir des informations APN, mais celles-ci sont enregistrées sur l'appareil pour mon téléphone). http://example.com;interface=wifi utilisera wi-fi. Sur OS 5, il y a une classe ConnectionFactory qui facilite beaucoup cela. Here's a link qui va plus en détail.

0

Je voudrais faire un commentaire, mais je pense que je n'ai pas encore assez de rep pour cela ... Donc je vais juste répondre et j'espère que cela ne se faire arroser pour simplement coller dans certains liens.

J'ai travaillé sur ce type exact de problème de réseau sur notre application la semaine dernière, et il est en effet difficile comme d'autres l'ont souligné. Voici deux liens qui nous ont vraiment aidé à utiliser HTTP sur différents appareils, en particulier les anciens appareils qui ne fournissent pas ConnectionFactory.

http://supportforums.blackberry.com/t5/Java-Development/Connecting-your-BlackBerry-http-and-socket-connections-to-the/td-p/206242

Le premier a quelques exemples de code, y compris la démonstration de l'interrogation classes ServiceBook et CoverageInfo du système pour prendre une décision au sujet de ce type de connexion fonctionne.

1

Ce fut un dur pour moi! Comme l'a dit Jonathan, vous devez mettre des paramètres dans l'url pour que cela fonctionne sur l'appareil. Vous ne devriez pas le faire à la main, mais utilisez plutôt ConnectionFactory.

Comme vous pouvez le faire, cela ne ferait que le faire fonctionner mais ce n'est pas le cas!

Le vrai problème est que l'adresse n'a pas été modifiée car elle possède: interface = wifi; deviceside = true (dans mon cas). Selon le serveur Web acceptant votre demande, cela pourrait casser le code.

Une solution que j'ai essayé et qui fonctionne est d'essayer de happend un paramètre faux comme

&foo=true -> &foo=true;deviceside=true 

Cela se traduira par un paramètre standard pour le serveur Web, mais votre appareil utiliserait pour pilote votre connexion. Cela fonctionne sur le simulateur sans ce code supplémentaire, car derrière il y a un serveur BIS pour vous. Sur l'appareil (comme dans mon cas) il n'y en a pas car j'utilise un appareil de développement non enregistré et sans SIM (juste wifi).

Un autre point est que la classe HttpConnection ne gère pas HTTP 302 Redirect et si vous en avez un, vous devez le gérer manuellement.

Questions connexes