web-dev-qa-db-ja.com

Android localhostへの接続

私はAndroidアプリケーションをwampサーバーのおかげでローカルのホストURLに接続しようとしていますが、動作しません。ここでの目標は、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

まず、Eclipse設定でサーバーが実行されているマシンのIPアドレスをバインドする必要があります。

このようにすることができます。

Eclipse Run Configuration

EclipseのPHPプロジェクトを右クリックし、[構成の実行]、[Argument]タブのある[Web Application]の順にクリックします。ここで、サーバーが実行されているマシンのポートとLAN IPアドレスを指定します。

このようなもの-port = 8888 --address = 192.168.1.6その後、URLをhttp://192.168.1.6:8080/tests/PhpProject1/connectionBDD.phpに更新します

ここでの私の場合、これは私のLAN IPアドレス192.168.1.6です。そこで、ipconfigifconfigなどのnetworkコマンドを使用してそれを見つけ、そのIPアドレスを使用する必要があります。

3
Ajay S

IPアドレス10.0.2.2は、エミュレータからデータを取得するために使用されます。 Localhostは、常にアプリケーションを実行しているエミュレーター/ Androidデバイスを指します。デバイスがPCからデータを取得できるようにするには、同じネットワーク(WiFiでルーターに接続)にある必要があり、PCのローカルIPアドレス(通常は192.168.1.x-number)を使用する必要があります。

11
user3316041

「localhost」に接続しようとすると、Androidデバイスに解決されます。エミュレータ内で実行している場合を除きます)。開発用に追加することをお勧めしますアプリケーション設定を指定するための設定アクティビティを提供する「設定」という名前のエントリと、使用するカスタムサーバーアドレスを指定できる「設定」の「開発者オプション」エントリがあるアクションバーのオーバーフローメニュー。開発時には、このオプションを使用してアプリのカスタムサーバーアドレスを入力できます(このためにlocalhostを使用するのではなく、実際にインターネット経由で到達可能な実サーバーアドレスが必要です)。

エミュレータの代わりに電話を使用し、ローカルホストでサービスを実行している場合は、「10.0.2.2」の代わりにURLでPCのIPアドレスを使用します。

3
Kavita_p

私が知っている簡単な方法の1つは、モバイルデータを保持してwifiを共有することです。このwifiにラップトップまたはコンピューターを接続します。今、ラップトップまたはデスクトップのIPを参照してください。 ur phoneからサービスを呼び出します。お使いの携帯電話とコンピューターは同じネットワークにあるためです。

0
Krishna

試しました "10.0.2.2:80/mysitename/page.php"奇跡が起こりました。今は機能しています。私はMacを使用しており、サーバーにXAMPPを使用しています。

ポート番号を変更できます。 80にしてみてください。ポート8080が機能していませんでした!

乾杯。

0
Saggy

Androidシミュレーターまたは実際のデバイスのいずれかからPCで利用可能なWebサービスにアクセスしようとしていると仮定します。

Androidエミュレーターの場合、[〜#〜] not [〜#〜]だけを使用する必要があります "localhost" 、「localhost」はAndroidエミュレータ自体、[〜#〜] not [〜#〜]ホストを意味するためパソコン。

/ etc/hostsファイルまたはシミュレーターまたは実デバイスを変更する必要があります。 「192.168.0.100 service.local」のような行を追加します。

0
Songlin

conveyor by Keyoti」拡張機能をVisual Studioにインストールするだけで、IPアドレスに応じてURLが自動的に生成されます。リンクは次のとおりです。

コンベア

ここまでは順調ですね....!

0
user5424356