2015-05-04 53 views
1

我目前正試圖讓我真正的Android設備(三星Galaxy S4迷你)訪問我的PHP腳本,我在我的本地主機。下面的代碼是我有的代碼。該代碼應該檢查用戶名和密碼,如果它存在於我的mysql數據庫中,使用我創建的login_tenant.php腳本。如何從一個真正的Android設備訪問本地主機

代碼:

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()); 

    } 

} 

我能夠從我的仿真器訪問本地主機,它工作正常。但

當我跑這在我的物理設備,它返回一個錯誤:「異常連接到10.0.2.2拒絕

能否一些你們的告訴我怎麼去解決這個問題,請 我試過嗎?一些東西,但他們沒有工作 1.我改變了本地主機的路徑到10.0.2.2:8080 ..等 2.我關掉了我的防火牆 3.我試圖更換到我的手機的IP路徑地址。

任何建議嗎?我感謝任何幫助!提前致謝!

+0

您是否在manifest中添加了訪問INTERNET權限? – VVB

+0

您使用2G還是Wifi? –

+0

看看這裏如何> http://stackoverflow.com/questions/4779963/how-can-i-access-my-localhost-from-my-android-device –

回答

0

你可以檢查在/ etc/apache2的/網站可用/默認的文件,下面的線路是這樣的本身(允許)或拒絕

<Directory /> 
    AllowOverride All 
</Directory> 
+0

我使用WAMP服務器 – paopao33

+0

你可以在這裏檢查是否存在類似的文件夾結構 :C:\ windows \ system32 \ drivers \ etc –

+0

是的,它確實存在於我的部分 – paopao33

1

所以,通過你的模擬器您訪問本地主機,但你不能從Android設備訪問相同。

這意味着你的Android設備使用2G/3G或WIFI連接來打本地主機。如果你使用localhost進行連接,那麼你必須在同一個網絡中,那麼只有你可以訪問本地主機。

但是在模擬器你在同一個網絡(可能是本地主機網絡),這就是爲什麼它工作。

最後,對於你的方法可能的解決方案是

  • 使用相同的網絡(本地主機網絡)在你的Android設備也。手段與Wifi連接到相同的本地主機互聯網連接。這次2G/3G連接將不起作用,因爲它們不在同一個網絡中

  • 將構建部分部署到外部並訪問外部IP地址進行連接。這次2G/3G或WIFI都能正常工作

+0

我確實有permission.INTERNET。 我的android模擬器可以訪問localhost/mysql數據庫。 我的手機目前通過USB直接連接到我的電腦。我的程序正在模擬器上工作,所以我正在使用物理設備嘗試它。 IP地址跟你說的一樣 我用wifi – paopao33

+0

謝謝@Gangulian我會檢查你的建議出來 – paopao33

+0

問題依然存在。如果可能,代碼是否有問題? – paopao33

相關問題