2014-02-16 3 views
15

Я пытаюсь подключить свое приложение Android к локальному URL-адресу хоста благодаря серверу wamp, но он не работает. Моя цель здесь - получить данные json и проанализировать эти данные. Для моего теста я использую устройство не эмулятор, и я использую разрешение в AndroidManifest.xml:Android-подключение к localhost

<uses-permission android:name="android.permission.INTERNET" /> 

Мой URL выглядит следующим образом:

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

я пытался:

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

Но он никогда не работал до сих пор:

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) 

Затем я попробовал с помощью теста json url, который был найден в Интернете: http://headers.jsontest.com/

Он работал очень хорошо, и я получил данные json по этому адресу. Так что, я думаю, мой код хорош, и проблема здесь в моем локальном URL-адресе, я не знаю, какая должна быть его точная форма. Я прочитал много потоков об этом, но я не нашел решения.

Вот мой код:

Основная деятельность:

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<String, String, JSONArray> { 

    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; 
    } 
} 

ответ

3

Сначала вы должны привязать IP-адрес машины, на которой работает ваш сервер, в настройках затмения.

Вы можете сделать это вот так.

Eclipse Run Configuration

правой кнопкой мыши на проекте PHP в затмении затем Run Configuration затем в Web Application, где вы найдете вкладку Argument. Теперь дайте IP-адрес порта и локальной сети вашего компьютера, на котором работает ваш сервер.

Что-то вроде этого --port = 8888 --address = 192.168.1.6 затем обновить URL для http://192.168.1.6:8080/tests/PhpProject1/connectionBDD.php

Здесь, в моем случае это мой адрес 192.168.1.6 IP LAN, то вам придется найдите его с помощью сетевой команды, например ipconfig, ifconfig и используйте этот IP-адрес.

+0

Спасибо за ответ, мне удалось это с помощью NetBeans теперь, urlConnection.connet(); работает отлично, но у меня есть другое исключение: java.net.SocketException: recvfrom failed: ECONNRESET (соединение сброшено сверстником), возможно, вы знаете эту проблему – AlexDG

+0

Ну, для этой новой проблемы вы можете прочитать здесь http://stackoverflow.com/questions/11207394/get-socketexception-connection-reset-by-peer-in-android, и теперь вы можете принять ответ –

+0

Благодарим за помощь. – AlexDG

5

Если вы пытаетесь подключиться к "локальный", он разрешит e Android, а не на свой собственный локальный хост (если только вы не работаете в эмуляторе). Что я рекомендую для разработки, так это добавить меню переполнения в панели действий, в котором есть запись с именем «Настройки», которая обеспечивает действие «Настройки» для указания параметров приложения и наличие записи «Параметры разработчика» в «Настройки», которая позволяет указать пользовательский адрес сервера для использования. Во время разработки вы можете использовать эту опцию для ввода пользовательского адреса сервера для своего приложения. (Вам понадобится реальный адрес сервера, который действительно доступен через Интернет, а не использование localhost для этого).

9

IP-адрес 10.0.2.2 используется для извлечения данных из эмулятора. Localhost всегда укажет на устройство эмулятора/андроида, запускающее приложение. Чтобы ваше устройство извлекало данные с вашего компьютера, оно должно быть в той же сети (подключенной WiFi к вашему маршрутизатору), и вы должны использовать локальный IP-адрес вашего компьютера (обычно 192.168.1.x-номер).

+1

Я пробовал его с ip-адресом моей lappy, но все же он не подключается – Dev

+0

тот же, не подключая – CularBytes

+0

не подключается !!! – Eddy

0

Один простой способ, который я знаю, - хранить мобильные данные и делиться Wi-Fi. Подключите ваш ноутбук или компьютер к этому Wi-Fi. Теперь см. Ip ур ноутбук или рабочий стол. Позвоните по телефону с телефона. Так как ваш телефон и компьютер находятся в одной сети сейчас.

1

Я предполагаю, что вы пытаетесь получить доступ к веб-сервису, доступному на вашем ПК, либо с помощью симулятора Android, либо с помощью реального устройства.

Для андроид эмулятор, вы должны НЕ просто использовать «локальный», так как «локальный» означает сам андроид эмулятор, НЕ хост-компьютер.

необходимо изменить файл/etc/hosts или симулятор или реальное устройство. добавьте строку типа «192.168.0.100 service.local».

0

Я попытался "10.0.2.2:80/mysitename/page.php" Чудо произошло, теперь он работает. Я нахожусь на Mac и использую XAMPP для сервера.

Вы можете изменить порт №. до 80 и попробуйте. порт 8080 не работал для меня!

Cheers.

1

Если вы используете свой телефон вместо эмулятора и выполняете службы на локальном хосте, то в url вместо '10 .0.2.2 'используйте IP-адрес вашего ПК.

Смежные вопросы