Salve gente,
Il problema è il seguente:
Ho appurato che quando eseguo connessioni alla classe RestClient funziona solamente se utilizzio la mia rete domestica.
In pratica Android richiedere che l'URL da inviare per fare la richiesta dati è la seguente:
private String url = "
http://MIO_IP_LETTO_DA_IPCONFIG/pagina_richiesta.php";
Ora, MIO_IP_LETTO_DA_IPCONFIG può equivalere ad esempio al genere: 192.168.0.105 (Casa mia) e il tutto come ho detto funziona corretamente.
Ovviamente se al posto di MIO_IP_LETTO_DA_IPCONFIG metto "localhost" oppure "127.0.0.1" non funziona a differenza di un browser che accetta anche questi.
Arrivo al problema: Dato che ce l'ho bisogno anche in università (Politecnico....) rieseguo la stessa procedura ma il tutto senza successo. e da LogCat ricevo quest'errore:
(Internet funziona correttamente con tutti i browser e in tutti i browser ho settato le impostazioni PROXY: proxy.polimi.it PORT: 8080
E pure lo script che servirebbe a bypassare la connessione in caso non si volesse usare il proxy:
http://wpad.polimi.it/wpad.dat )
01-23 14:35:17.819: W/System.err(2450): java.net.SocketException: No route to host
01-23 14:35:17.944: W/System.err(2450): at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
01-23 14:35:17.944: W/System.err(2450): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:115)
01-23 14:35:17.944: W/System.err(2450): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:244)
01-23 14:35:17.944: W/System.err(2450): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:533)
01-23 14:35:17.944: W/System.err(2450): at java.net.Socket.connect(Socket.java:1055)
01-23 14:35:17.944: W/System.err(2450): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
01-23 14:35:17.944: W/System.err(2450): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143)
01-23 14:35:17.944: W/System.err(2450): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-23 14:35:17.952: W/System.err(2450): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-23 14:35:17.952: W/System.err(2450): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
01-23 14:35:17.952: W/System.err(2450): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-23 14:35:17.952: W/System.err(2450): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-23 14:35:17.952: W/System.err(2450): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
Per darvi un idea a RestClient ci accedo così:
// Creo il Client
RestClient client = new RestClient(url);
// Scelgo il metodo POST
client.Execute(RequestMethod.POST);classe RestClient: (l'eccezzione parte al metodo: protected String executeRequest(HttpUriRequest request, String url) )
public class RestClient {
protected ArrayList<NameValuePair> params;
protected ArrayList<NameValuePair> headers;
protected 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 enum RequestMethod {
GET, POST, PUT, DELETE;
}
// Controllo il RequestMethod
public String Execute(RequestMethod method) throws Exception {
switch (method) {
//Se si usa GET configurare a dovere i file PHP
case GET: {
// Aggiungo i Parametri settati
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;
}
}
}
//Aggiungo all'URL i parametri
HttpGet request = new HttpGet(url + combinedParams);
// Aggiungo possibili Headers inizializzati
for (NameValuePair h : headers) {
request.addHeader(h.getName(), h.getValue());
}
response = executeRequest(request, url);
}
case POST: {
HttpPost request = new HttpPost(url);
// Aggiungo possibili Headers inizializzati
for (NameValuePair h : headers) {
request.addHeader(h.getName(), h.getValue());
}
if (!params.isEmpty()) {
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
}
response = executeRequest(request, url);
}
}
return response;
}
//L'eccezione parte qua dentro:
protected String executeRequest(HttpUriRequest request, String url) {
HttpClient client = new DefaultHttpClient();
String response = null;
try {
//ESATTAMENTE ALL'INVOCAZIONE DI client.execute
HttpResponse httpResponse = client.execute(request);
responseCode = httpResponse.getStatusLine().getStatusCode();
message = httpResponse.getStatusLine().getReasonPhrase();
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
//Chiamo la conversione da Stream a String
response = convertStreamToString(instream);
//Chiusura dello Stream con rilascio connessione
instream.close();
return response;
}
} catch (ClientProtocolException e) {
client.getConnectionManager().shutdown();
e.printStackTrace();
} catch (IOException e) {
client.getConnectionManager().shutdown();
e.printStackTrace();
}
return response;
}
//Conversione in String
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}Qualcuno sa come darmi una mano? Grazie mille