如何从真正的Android设备访问localhost

时间:2015-05-04 04:35:57

标签: php android mysql debugging localhost

我目前正在尝试让我真正的Android设备(三星Galaxy S4 mini)访问我在我的localhost中的PHP脚本。以下代码是我的位代码。该代码应该使用我创建的login_tenant.php脚本检查用户名和密码(如果它存在于我的mysql数据库中)。

代码:

void loginAsTenant() {

    try {

        HttpClient httpclient = new DefaultHttpClient();

        HttpPost httpPost = new    HttpPost("http://10.0.2.2/aircraftoperatorapp/login_tenant.php");

        String username = txtUsername.getText().toString();
        String password = txtPassword.getText().toString();

        nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("username", username)); 
        nameValuePairs.add(new BasicNameValuePair("password", password));

        response = httpclient.execute(httpPost);

        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));


        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        final String response = httpclient.execute(httpPost, responseHandler);
        System.out.println("Response: " + response);

        runOnUiThread(new Runnable() {
            public void run() {
                //lblResponse.setText("Response from PHP: " + response);
                dialog.dismiss();
            }
        });

        if(response.equalsIgnoreCase("User Found")){
            runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(Homepage.this,"Login Success", Toast.LENGTH_SHORT).show();
                    //Intent i = new Intent(getApplicationContext(), ArrivalTimeSched.class);
                    //startActivity(i);
                }
           });
            Intent intent = new Intent("com.example.aircraftoperatorapp.TenantPage");
            users = new Bundle();

            users.putString("loggedInTenant", username);

            intent.putExtras(users);
            startActivityForResult(intent, requestCode);

        }
        else {
            showAlert();                
        }

    }
    catch (Exception e ){
         dialog.dismiss();
         System.out.println("Exception : " + e.getMessage());

    }

}

我可以从我的模拟器访问本地主机,它工作正常。但

当我在物理设备中运行它时,它返回了一个错误:&#34;异常连接到10.0.2.2被拒绝。

你们有些人可以告诉我如何解决这个问题吗? 我尝试了几件事,但他们没有工作 1.我将localhost的路径更改为10.0.2.2:8080 ..等等 我关掉了防火墙 我尝试将路径替换为手机的IP地址。

有什么建议吗?我感谢任何帮助!提前谢谢!

2 个答案:

答案 0 :(得分:1)

因此,通过您的模拟器访问本地主机,但您无法从Android设备访问相同的主机。

这意味着您的Android设备使用2G / 3G或WIFI连接来点击本地主机。如果您使用localhost进行连接,那么您必须位于同一网络中,那么只有您可以访问localhost。

但是在模拟器中,你在同一个网络(可能是本地主机网络),这就是它工作的原因。

最后,您的方法的可能解决方案是

  • 也在Android设备中使用相同的网络(本地主机网络)。意味着将Wifi连接到相同的本地主机互联网连接。这次2G / 3G连接不起作用,因为它们不在同一个网络中

  • 在外部部署构建一些,并访问外部IP地址进行连接。这次2G / 3G或WIFI都能正常工作

答案 1 :(得分:0)

你可以检查/ etc / apache2 / sites-available / default文件,下面的行是否像这样(Allow)或Deny

<Directory />
    AllowOverride All
 </Directory>