Conexión de Android a localhost

Intento conectar mi aplicación de Android a una url de host local gracias al servidor de wamp, pero no funciona. Mi objective aquí es obtener datos json y analizar estos datos. Para mi prueba, estoy usando un dispositivo, no el emulador, y uso el permiso en AndroidManifest.xml:

 

Mi url se ve así:

 String url = "http://10.0.2.2:8080/tests/PhpProject1/connectionBDD.php"; 

Lo intenté :

 http://localhost/ http://10.0.2.2:8080/ http://10.0.2.2/ 

Pero nunca funcionó hasta ahora:

  java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused) failed to connect to /10.0.2.2 (port 8080): connect failed: ETIMEDOUT (Connection timed out) java.net.ConnectException: failed to connect to /10.0.2.2 (port 80): connect failed: ETIMEDOUT (Connection timed out) 

Entonces probé con una prueba de json url encontrada en internet: http://headers.jsontest.com/

Funcionó muy bien y obtuve datos JSON en esta dirección. Así que supongo que mi código es bueno y el problema aquí es mi url localhost, no sé cuál debería ser su forma exacta. Leí muchos hilos al respecto, pero no encontré una solución.

Aquí mi código:

Actividad principal :

 public class MainActivity extends Activity { private String url = "http://10.0.2.2:8080/tests/PhpProject1/connectionBDD.php"; private ListView lv = null; private Button bGetData; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final JsonDownloaderTask task = new JsonDownloaderTask(this); lv = (ListView) findViewById(R.id.list); bGetData = (Button)findViewById(R.id.getdata); bGetData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { task.execute(url); } }); } public void jsonTaskComplete(JSONArray data){ //todo } } 

AsyncTask:

 public class JsonDownloaderTask extends AsyncTask { MainActivity ma; public JsonDownloaderTask(MainActivity main){ ma = main; } @Override protected JSONArray doInBackground(String... url) { JSONParser jParser = new JSONParser(); // Getting JSON from URL JSONArray jsonArray = null; try { jsonArray = jParser.getJSONFromUrl(url[0]); } catch (IOException e) { e.printStackTrace(); } return jsonArray; } protected void onPostExecute(JSONArray data){ ma.jsonTaskComplete(data); } } 

JSONParser:

 public class JSONParser { String data = ""; JSONArray jsonArray = null; InputStream is = null; public JSONParser(){} // Method to download json data from url public JSONArray getJSONFromUrl(String strUrl) throws IOException{ try{ URL url = new URL(strUrl); // Creating an http connection to communicate with url HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); // Connecting to url urlConnection.connect(); // Reading data from url is = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuffer sb = new StringBuffer(); String line = ""; while( ( line = br.readLine()) != null){ sb.append(line); } is.close(); data = sb.toString(); //br.close(); jsonArray = new JSONArray(data); }catch(Exception e){ Log.d("Exception while downloading url", e.toString()); }finally{ is.close(); } return jsonArray; } } 

Primero, debe vincular la dirección IP de la máquina donde se ejecuta su servidor en la configuración de eclipse.

Puedes hacer esto así.

Configuración de ejecución de Eclipse

Haga clic con el botón derecho en el proyecto de PHP en el eclipse, luego Ejecutar configuración y luego en la Web Application donde encontrará la pestaña Argument . Ahora aquí proporcione el puerto y la dirección IP de LAN de su máquina en la que se está ejecutando su servidor.

Algo como esto –port = 8888 –address = 192.168.1.6 luego actualice la URL a http://192.168.1.6:8080/tests/PhpProject1/connectionBDD.php

Aquí en mi caso esta es mi dirección IP LAN 192.168.1.6, allí tendrá que encontrarla usando el comando de red como ipconfig , ifconfig y usar esa dirección IP.

La dirección IP 10.0.2.2 se usa para obtener datos del emulador. Localhost siempre apuntará al emulador / dispositivo Android que ejecuta la aplicación. Para permitir que su dispositivo obtenga datos de su PC, debe estar en la misma red (conectada por WiFi a su enrutador) y debe usar la dirección IP local de su computadora (normalmente un número 192.168.1.x).

Si intentas conectarte a “localhost”, se resolverá en el dispositivo Android, no en tu propio localhost (a menos que estés ejecutando dentro del emulador). Lo que recomiendo para el desarrollo es agregar un menú de desbordamiento en la barra de acción que tiene una entrada llamada “Configuración” que proporciona una actividad de Configuración para especificar la configuración de la aplicación y tener una entrada de “Opciones del desarrollador” en “Configuración” que te permite especificar una dirección de servidor personalizada para usar. Durante el desarrollo, puede usar esta opción para ingresar una dirección de servidor personalizada para su aplicación. (Necesitará una dirección de servidor real que sea realmente accesible a través de Internet en lugar de usar localhost para esto).

Supongo que está intentando acceder al servicio web disponible en su PC desde un simulador de Android o desde un dispositivo real.

Para un emulador de Android, NO debe usar “localhost”, porque “localhost” significa el propio emulador de Android, NO la PC host.

necesita modificar el archivo / etc / hosts o el simulador o dispositivo real. agregue una línea como “192.168.0.100 service.local”.

Si está utilizando su teléfono en lugar de emulador y está ejecutando servicios en localhost, en la url en lugar de ’10 .0.2.2 ‘use la dirección IP de su PC.

Una forma sencilla que sé es mantener los datos móviles activados y compartir wifi. Conecte su computadora portátil o computadora a este wifi. Ahora vea la ip de su laptop o computadora de escritorio. Llame al servicio desde su teléfono. Dado que su teléfono y su computadora están en la misma red ahora.

Intenté “10.0.2.2:80/mysitename/page.php” Miracle sucedió, está funcionando ahora. Estoy en Mac y uso XAMPP para el servidor.

Puede cambiar el puerto no. a 80 y prueba. ¡el puerto 8080 no funcionaba para mí!

Aclamaciones.