无法从我的Android模拟器连接到本地Web服务

时间:2014-01-09 00:44:51

标签: java android networking

我在从模拟器连接到本地Web服务器时遇到问题。我可以在模拟器外部连接它。 模拟器得到: org.apache.http.conn.httphostconnectexception connection to http //localhost;808 refused

protected String doInBackground(String... args) {
        try {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url_all_products,
                    "GET", params);
            // Check your log cat for JSON reponse
            Log.d("All Products: ", json.toString());
            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // products found
                    // Getting Array of Products
                    products = json.getJSONArray(TAG_PRODUCTS);

                    // looping through All Products
                    for (int i = 0; i < products.length(); i++) {
                        JSONObject c = products.getJSONObject(i);

                        // Storing each json item in variable
                        String id = c.getString(TAG_PID);
                        String name = c.getString(TAG_NAME);

                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        map.put(TAG_PID, id);
                        map.put(TAG_NAME, name);

                        // adding HashList to ArrayList
                        productsList.add(map);
                    }
                } else {
                    // no products found
                    // Launch Add New product Activity
                    Intent i = new Intent(getApplicationContext(),
                            NewProductActivity.class);
                    // Closing all previous activities
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
             System.out.println("Got an IOException: " + e.getMessage());
            // TODO: handle exception
        }
        return null;
    }

2 个答案:

答案 0 :(得分:1)

尝试连接到http://10.0.2.2:8080

10.0.2.2 IP地址在模拟器中是特殊的,并且将透明地连接到主机开发机器的localhost(127.0.0.1)。

如果在模拟器中使用localhost127.0.0.1,则会引用内部模拟环回接口。如果您在模拟器中运行另一个程序,在同一端口充当TCP或UDP服务器,这将非常有用。但是,在您的具体情况下,您真的想要“脱离沙盒”。

official documentation有更多信息(和示例)。

答案 1 :(得分:0)

您可能使用错误的网络地址来访问网络服务。

http://localhost转到Android模拟器中的设备。使用10.0.2.2访问主机环回接口(即开发计算机上的127.0.0.1)。

请参阅Android Emulator Networking

编辑:您的例外情况为http //localhost;808,但您的主机名应为http //localhost:808,而:代替;