2012-07-10 2 views
0

En ce moment, je suis confronté à un problème ici, les données de base Interrogation d'un service de repos, il a livré une chaîne json fournit avec 30 000 caractères. Les requêtes seront faites en réseau 3g Maintenant, au problème de la chaîne arrête après environ 4000 caractères et je ne sais pas où se trouve le reste.json chaîne n'est pas un transfert complet

RestClient.java

public class RestClient { 

private ArrayList <NameValuePair> params; 
private ArrayList <NameValuePair> headers; 

private String url; 

private int responseCode; 
private String message; 

private String response; 

public String getResponse() { 
    return response; 
} 

public String getErrorMessage() { 
    return message; 
} 

public int getResponseCode() { 
    return responseCode; 
} 

public RestClient(String url) 
{ 
    this.url = url; 
    params = new ArrayList<NameValuePair>(); 
    headers = new ArrayList<NameValuePair>(); 
} 

public void AddParam(String name, String value) 
{ 
    params.add(new BasicNameValuePair(name, value)); 
} 

public void AddHeader(String name, String value) 
{ 
    headers.add(new BasicNameValuePair(name, value)); 
} 

public void Execute(RequestMethod method) throws Exception 
{ 
    switch(method) { 
     case GET: 
     { 
      //add parameters 
      String combinedParams = ""; 
      if(!params.isEmpty()){ 
       combinedParams += "?"; 
       for(NameValuePair p : params) 
       { 
        String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8"); 
        if(combinedParams.length() > 1) 
        { 
         combinedParams += "&" + paramString; 
        } 
        else 
        { 
         combinedParams += paramString; 
        } 
       } 
      } 

      HttpGet request = new HttpGet(url + combinedParams); 

      //add headers 
      for(NameValuePair h : headers) 
      { 
       request.addHeader(h.getName(), h.getValue()); 
      } 

      executeRequest(request, url); 
      break; 
     } 
     case POST: 
     { 
      HttpPost request = new HttpPost(url); 

      //add headers 
      for(NameValuePair h : headers) 
      { 
       request.addHeader(h.getName(), h.getValue()); 
      } 

      if(!params.isEmpty()){ 
       request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
      } 

      executeRequest(request, url); 
      break; 
     } 
    } 
} 

private void executeRequest(HttpUriRequest request, String url) 
{ 
    request.setHeader("Authorization", "Basic sssss"); 
    HttpClient client = new DefaultHttpClient(); 
    HttpResponse httpResponse; 

    try { 
     httpResponse = client.execute(request); 

     responseCode = httpResponse.getStatusLine().getStatusCode(); 
     message = httpResponse.getStatusLine().getReasonPhrase(); 

     HttpEntity entity = httpResponse.getEntity(); 

     if (entity != null) { 

      InputStream instream = entity.getContent(); 
      response = convertStreamToString(instream); 

      // Closing the input stream will trigger connection release 
      instream.close(); 
     } 

    } catch (ClientProtocolException e) { 
     client.getConnectionManager().shutdown(); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     client.getConnectionManager().shutdown(); 
     e.printStackTrace(); 
    } 
} 

private static String convertStreamToString(InputStream is) { 

    BufferedReader reader = new BufferedReader(new InputStreamReader(is),8 * 1024); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

Aktivity Classe

ConnectivityManager connMgr = (ConnectivityManager) 
       getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
      if (networkInfo != null && networkInfo.isConnected()) { 
       // fetch data 

      execute = new Netzwerk().execute("https://....."); 
      try { 
       String t = execute.get().toString(); 
        Log.d("MyTag", "Response: " + t); 


      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } else { 
      // display error 
     } 

Netzwerk.java

public class Netzwerk extends AsyncTask { 
    @Override 
protected Object doInBackground(Object... arg0) { 
      RestClient rest = new RestClient(arg0[0].toString()); 
      try { 
       rest.Execute(RequestMethod.GET); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      System.out.println(rest.getResponse()); 
      Log.d("MyTag", "getResponse: " + rest.getResponse()); 
      Log.d("MyTag", "getResponseCode: " + rest.getResponseCode()); 
    return rest.getResponse(); 
} 

public String httpAuthentication(String user, String password) { 

    String auth=null; 
    try { 
     auth = android.util.Base64.encodeToString(
       (user + ":" + password).getBytes("UTF-8"), 
       android.util.Base64.NO_WRAP); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Log.d("MyTag", "Base64 encoded auth string: " + auth); 
    return auth; 
}} 
+0

Vous allez transférer 30 000 caractères ... assez fréquemment? Wow .. – TheZ

+0

On dirait que vous devriez faire une mise en cache majeure. – ninetwozero

+0

J'appelle le service pas souvent – Drawlix

Répondre

0

Je pense que vous devrait utiliser une classe AsyncTask pour ce long traitement.

+0

J'appelle cette classe d'une asyncTask – Drawlix

+0

Avez-vous utilisé la méthode get de l'objet asyncTask après execute()? – jeremw

+0

oui j'appelle le asyncTask et montre le résultat via tost avec get méthode de asyncTask – Drawlix

Questions connexes