2014-05-04 3 views
-3

Je tente de me connecter à un service Web dans mon localhost mais. HttpConnection ne retourne pas le contenu. regardez le code et les commentaires. il semble que getContentLenght renvoie -1. mais quand je vérifie mes webservices ses valeurs de retour de json.HttpURLConnection ne pas retourner le contenu

package medapp.app; 

import android.os.AsyncTask; 
import android.util.Log; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

/** 
* Created by MacBookPro on 5/4/14. 
*/ 
public class PostActivity extends AsyncTask<Object, Void, String> { 

    @Override 
    protected String doInBackground(Object... arg0){ 

     int responseCode = -1; 

     //PostActivity getBlogPostsTask = new PostActivity(); 
     try 
     { 
      URL blogFeedUrl = new URL("http://localhost/medapp/public/mobile/post"); 
      HttpURLConnection connection = (HttpURLConnection) blogFeedUrl.openConnection(); 
      connection.connect(); 

      responseCode = connection.getResponseCode(); 

      if (responseCode == 200) 
      { 
       InputStream inputStream = connection.getInputStream(); 
       Reader reader = new InputStreamReader(inputStream); 
       int contentLength = connection.getContentLength();// connection getting -1 
       char[] charArray = new char[contentLength]; //This is where error occurs. 
       reader.read(charArray); 
       String responseData = new String(charArray); 
       Log.v("TAG", responseData); 

      } 
      else 
      { 
       Log.i("TAG", "Unsuccessful HTTP Response Code: " + responseCode); 
      } 



     } 
     catch (MalformedURLException e) 
     { 
      Log.e("TAG", "exception caught: ", e); 
     } 
     catch (IOException e) 
     { 
      Log.e("TAG", "exception caught: ", e); 
     } 
     catch (Exception e) 
     { 
      Log.e("TAG", "exception caught: ", e); 
     } 


     return "Code: " + responseCode; 
    } 
} 

Voici mon fichier journal

05-04 12:48:17.251 2358-2371/medapp.app E/TAG﹕ exception caught: 
    java.lang.NegativeArraySizeException: -1 
      at medapp.app.PostActivity.doInBackground(PostActivity.java:38) 
      at medapp.app.PostActivity.doInBackground(PostActivity.java:17) 
      at android.os.AsyncTask$2.call(AsyncTask.java:288) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:841) 

Répondre

1

Il est dans le documentation:

Renvoie la longueur du contenu en octets spécifiés par l'en-tête de réponse contenu longueur du champ ou -1 si ce champ n'est pas défini.

Renvoie la valeur de la longueur du champ d'en-tête de réponse.

Au sommet, il y a aussi cet avertissement:

Par défaut, cette mise en œuvre de HttpURLConnection demande que serveurs utilisent la compression gzip. Puisque getContentLength() renvoie le nombre d'octets transmis, vous ne pouvez pas utiliser cette méthode pour prédire comment plusieurs octets peuvent être lus depuis getInputStream(). Au lieu de cela, lisez ce flux jusqu'à ce qu'il soit épuisé: lors de la lecture() retourne -1

La dernière ligne a la solution à votre problème.

+0

désolé comment puis-je obtenir la taille du contenu? im nouveau dans le développement Android merci – user3409517

Questions connexes