2010-08-16 9 views
2

Je tente de construire un client https pour android et j'ai besoin d'obtenir une requête d'un servlet mais quand j'utilise la méthode getInputStream l'application se bloque.httpsURLConnection.getInputStream() se bloque

Aucune erreur ne se bloque uniquement lorsque j'appelle la méthode.

String url = "https://.../Servlet"; 

    try { 
    mPushLiteConnection = (HttpsURLConnection) new URL(url).openConnection(); 
    mPushLiteConnection.setDoOutput(true); 
    mPushLiteConnection.setDoInput(true); 
    mPushLiteConnection.setRequestMethod("POST"); 
    mPushLiteConnection.connect(); 

    subscribe(); 

    InputStream in = (InputStream)mPushLiteConnection.getInputStream(); 

    unsubscribe(); 

    mPushLiteConnection.disconnect(); 

    } catch (MalformedURLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

Ceci est seulement pour vérifier l'appel, mais cela n'a pas fonctionné. Une idée de pourquoi ça se bloque et ne me dit rien? La méthode d'abonnement fonctionne, quand je commente la ligne avec l'inputtream, le serveur me montre tout est correct. Je peux essayer la même chose avec Firefox et cela fonctionne et je peux voir la demande. J'ai également mis le keystore dans le TrustManager.

désolé pour mon anglais j'espère que je l'explique ennougth.

THX

+0

Ce que tu fais sur le thread principal ou un thread différent? – Falmarri

+0

avez-vous installé le certificat sur le côté client? – Vinay

Répondre

2

Je pense que je connais la raison! La méthode getInputStream() a besoin (pourquoi jamais) de contentLength! Dans la servlet je veux me connecter n'est pas contentLength couse c'est une servlet punk push ... il envoie toutes les pièces de temps de XML sans longueur.

Donc .. HttpsURLConnection ne sont pas utiles pour chunked!

Maintenant, j'essayer la même connexion avec httpClient j'espère que cela fonctionne pour elle ... sinon: je saute derrière le bus;)

1

i utiliser un autre fil et oui je l'ai installé le certificat sur le côté client

j'ai une deuxième connexion pour charger une liste d'une autre servlet et il fonctionne très bien, mais je ne besoin un InputStream pour lui seul un analyseur SAX. Mais je ne peux pas utiliser le SAX Parser pour ce servlet, couse je ne reçois pas de XML, seulement des balises XML sans l'étiquette de début de document

maybie vous savez comment ignorer la balise Start Document? Je ne suis pas sûr si j'ai besoin de SAX

+0

Ok ... quand il se bloque et je tue le serveur, il continue Je pense que la fin InputStream Blocks ne finit jamais couse le servlet est un servlet de poussée, il ne se termine jamais avec l'envoi de demandes – Informatic0re