Android与本地主机的连接

问题描述 投票:19回答:9

多亏了wamp服务器,我试图将我的android应用程序连接到本地主机url,但它无法正常工作。我的目标是获取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数据。所以我想我的代码很好,这里的问题是我的本地主机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;
    }
}
java android json localhost wamp
9个回答
3
投票

首先,您必须在eclipse设置中绑定运行服务器的计算机的IP地址。

您可以这样操作。

““>

右键单击Eclipse中的PHP项目,然后运行配置,然后在Web Application中找到Argument选项卡。现在,在此处提供运行服务器的计算机的端口和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之类的网络命令找到它,并使用该IP地址。

11
投票
IP地址10.0.2.2用于从仿真器获取数据。Localhost将始终指向运行该应用程序的模拟器/ Android设备。要让您的设备从您的PC上获取数据,它应该位于同一网络中(通过WiFi连接到路由器),并且您应该使用PC的本地IP地址(通常为192.168.1.x编号)。] >

5
投票
如果尝试连接到“ localhost”,它将解析为Android设备,而不是您自己的localhost(除非您在模拟器中运行)。我建议开发的方法是在操作栏中添加一个溢出菜单,该菜单具有名为“ Settings”的条目,该条目提供用于指定应用程序设置的Settings活动,并且在“ Settings”中具有一个“ Developer options”条目,可让您指定要使用的自定义服务器地址。在开发过程中,您可以使用此选项输入应用程序的自定义服务器地址。 (您将需要一个实际的服务器地址,该地址实际上可以通过Internet而不是使用localhost来访问)。

3
投票
如果您使用电话代替仿真器并在本地主机上运行服务,则在URL中而不是'10 .0.2.2'中使用PC的IP地址。

0
投票
我知道的一种简单方法是保留移动数据并共享wifi。将笔记本电脑或计算机连接到此wifi。现在查看您的笔记本电脑或台式机的IP。通过您的电话致电服务。由于您的手机和计算机现在位于同一网络中。

0
投票
我假设您正在尝试从Android模拟器或真实设备访问PC上可用的Web服务。

0
投票
我尝试了

“ 10.0.2.2:80/mysitename/page.php”


0
投票
只需在Visual Studio中安装扩展名

[Keyvey]],它将根据您的IP地址自动生成一个url。这是链接:


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...”

我使用仿真器以及在设备中测试了该应用程序。两种情况都可以解决。

© www.soinside.com 2019 - 2024. All rights reserved.