我正在尝试将我的Android应用程序连接到本地主机URL,这要归功于wamp服务器,但它不起作用。我的目标是获取json数据并解析这些数据。对于我的测试,我使用的设备不是模拟器,我在AndroidManifest.xml中使用权限:
<uses-permission android:name="android.permission.INTERNET" />
我的网址看起来像这样:
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数据。所以我想我的代码很好,这里的问题是我的localhost网址,我不知道应该是什么样的确切形式.. 我读了很多关于它的线索,但我找不到解决方案。
这是我的代码:
主要活动:
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;
}
}
答案 0 :(得分:11)
IP地址10.0.2.2用于从仿真器获取数据。 Localhost将始终指向运行该应用程序的模拟器/ android设备。 要让您的设备从您的电脑上获取数据,它应该在同一个网络中(通过WiFi连接到您的路由器),您应该使用您的电脑的本地IP地址(通常是192.168.1.x号码)。 / p>
答案 1 :(得分:5)
如果您尝试连接到“localhost”,它将解析为Android设备,而不是您自己的localhost(除非您在模拟器中运行)。我建议开发的是在操作栏中添加一个溢出菜单,其中包含一个名为“Settings”的条目,该条目提供用于指定应用程序设置的Settings活动,并在“Settings”中有一个“Developer options”条目,可让您指定要使用的自定义服务器地址。在开发期间,您可以使用此选项为您的应用输入自定义服务器地址。 (您将需要一个实际的服务器地址,实际上可以通过Internet访问,而不是使用localhost)。
答案 2 :(得分:3)
首先,您必须在eclipse设置中绑定运行服务器的计算机的IP地址。
你可以这样做。
右键单击eclipse中的PHP
项目,然后单击Run Configuration,然后在Web Application
中找到Argument
选项卡。现在,在此处提供运行服务器的计算机的端口和LAN IP地址。
像这样 - port = 8888 --address = 192.168.1.6 然后将网址更新为http://192.168.1.6:8080/tests/PhpProject1/connectionBDD.php
在我的情况下,这是我的局域网IP地址192.168.1.6,您必须使用ipconfig
,ifconfig
之类的网络命令找到它并使用该IP地址。
答案 3 :(得分:3)
如果您使用手机而不是模拟器并在localhost上运行服务,则使用网址而不是&#39; 10.0.2.2&#39;使用PC的IP地址。
答案 4 :(得分:0)
我知道的一个简单方法是保持移动数据并共享wifi。将笔记本电脑或计算机连接到此wifi。现在看看你的笔记本电脑或台式机的IP。从您的手机拨打电话服务。由于您的手机和计算机现在处于同一网络中。
答案 5 :(得分:0)
我假设您正尝试从Android模拟器或真实设备访问PC上可用的Web服务。
对于Android模拟器,您必须 NOT 只使用“localhost”,因为“localhost”表示Android模拟器本身, NOT 主机PC。
您需要修改/ etc / hosts文件或模拟器或真实设备。添加像“192.168.0.100 service.local”这样的行。
答案 6 :(得分:0)
我尝试了 &#34; 10.0.2.2:80 / mysitename / page.php&#34; 奇迹发生了,它现在正在工作。 我在Mac上并使用XAMPP作为服务器。
您可以更改端口号。到80并尝试。 8080端口对我不起作用!
干杯。
答案 7 :(得分:0)
答案 8 :(得分:0)
我通过以下方法解决了它: 1.在清单中添加另一个android权限:“ android.permission.ACCESS_NETWORK_STATE” 2.在使用xampp时,我已经共享了网络中桌面的xampp文件夹。 3. xampp在IP为192.168.x.x的桌面上运行,因此Web服务的URL而不是良性的{http://localhost/myapi ...“是” http://192.168.x.x/myapi ...“
我使用仿真器以及在设备中测试了该应用程序。两种情况都能解决。