HttpClient não funciona em dispositivo real
-
14-11-2019 - |
Pergunta
Eu uso esse código para fazer uma solicitação HttpGet ao meu servidor web.Funciona bem no emulador, mas não no meu HTC Sense.A execução termina sem fazer nenhuma solicitação http.Qualquer ideia ?
File f = new File(user.getPhotopath());
List<NameValuePair> reqparams = new LinkedList<NameValuePair>();
reqparams.add(new BasicNameValuePair("email", user.getEmail()));
reqparams.add(new BasicNameValuePair("pwd", user.getPassword()));
reqparams.add(new BasicNameValuePair("name", user.getScreenName()));
reqparams.add(new BasicNameValuePair("photo", f.getName()));
reqparams.add(new BasicNameValuePair("preference", user.getPrefs()));
reqparams.add(new BasicNameValuePair("bluetoothid", bid));
String urlstring = "http://www.mysite.com/me?"+ URLEncodedUtils.format(reqparams, "utf-8");
try {
URL url = new URL(urlstring);
URI myURI = null;
try {
myURI = url.toURI();
} catch (URISyntaxException e) {
e.printStackTrace();
}
HttpClient httpClient = new DefaultHttpClient();
HttpGet getMethod = new HttpGet(myURI);
HttpResponse webServerResponse = null;
HttpEntity httpEntity = null;
try {
webServerResponse = httpClient.execute(getMethod);
httpEntity = webServerResponse.getEntity();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (httpEntity != null) {
InputStream instream = httpEntity.getContent();
BufferedReader reader = new BufferedReader( new InputStreamReader(instream));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
resultStr = sb.toString();
instream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Solução
Embora sua abordagem esteja correta e funcione, é muito mais fácil usar o EntidadeUtils classe auxiliar para recuperar o corpo da resposta como uma string.Simplesmente:
String body = EntityUtils.toString(httpEntity);
Outras dicas
Não houve exceção nem aviso no stacktrace.Apenas mensagens de alocação de memória.De qualquer forma, resolvi usando URLConnection em vez de HttpClient:
try {
URL url = new URL(urlstring);
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
BufferedInputStream bufferedInput = new BufferedInputStream(inputStream);
// Read the response into a byte array
ByteArrayBuffer byteArray = new ByteArrayBuffer(50);
int current = 0;
while((current = bufferedInput.read()) != -1){
byteArray.append((byte)current);
}
// Construct a String object from the byte array containing the response
resultStr = new String(byteArray.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
Por alguma razão funcionou.Ainda tentando descobrir o que deu errado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow