我在从模拟器连接到本地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;
}
答案 0 :(得分:1)
尝试连接到http://10.0.2.2:8080
。
10.0.2.2
IP地址在模拟器中是特殊的,并且将透明地连接到主机开发机器的localhost(127.0.0.1
)。
如果在模拟器中使用localhost
或127.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
,而:
代替;
。