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;
}}
Vous allez transférer 30 000 caractères ... assez fréquemment? Wow .. – TheZ
On dirait que vous devriez faire une mise en cache majeure. – ninetwozero
J'appelle le service pas souvent – Drawlix