it-roy-ru.com

Android-соединение с localhost

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

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

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

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

Eclipse Run Configuration

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

Примерно так: --port = 8888 --address = 192.168.1.6 затем обновите URL-адрес до http://192.168.1.6:8080/tests/PhpProject1/connectionBDD.php

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

3
Ajay S

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

10
user3316041

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

5
Michael Aaron Safyan

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

2
Kavita_p

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

0
Krishna

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

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

Приветствия.

0
Saggy

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

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

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

0
Songlin

Просто установите расширение "конвейер от Keyoti" в Visual Studio, и оно автоматически сгенерирует URL-адрес в соответствии с вашим IP-адресом. вот ссылка: 

конвейер

все идет нормально....!

0
Musab Rasheed