2015-01-21 57 views
1

所以我對此很新穎。我正在關注網絡上的一個教程,展示瞭如何連接這兩個教程。但是我所做的每件事都只是跳起來抓住一部分,它說「沒有連接」。我錯過了什麼?我還連接到一個http服務器,使用PHP腳本查詢數據庫中的用戶名和密碼。將Android連接到MySQL

try 
    { 
     nameValuePairs = new ArrayList<NameValuePair>(); 

     nameValuePairs.add(new BasicNameValuePair("username", username)); 
     nameValuePairs.add(new BasicNameValuePair("password", password)); 

     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     response = httpClient.execute(httpPost); 

     if(response.getStatusLine().getStatusCode()==200) 
     { 
      entity = response.getEntity(); 

      if(entity != null) 
      { 
       InputStream instream = entity.getContent(); 

       JSONObject jsonResponse = new JSONObject(instream.toString()); 

       String retUser = jsonResponse.getString("upime"); 
       String retPass = jsonResponse.getString("geslo"); 

       if(username.equals(retUser) && password.equals(retPass)) 
       { 
        SharedPreferences sp = getSharedPreferences("logindetails", 0); 

        SharedPreferences.Editor spedit = sp.edit(); 

        spedit.putString("upime", username); 
        spedit.putString("geslo", password); 

        spedit.commit(); 

        Toast.makeText(getBaseContext(), "Login successful", Toast.LENGTH_SHORT).show(); 
       } 
       else 
       { 
        Toast.makeText(getBaseContext(), "Failed to login", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Toast.makeText(getBaseContext(), "No connection", Toast.LENGTH_LONG).show(); 
    } 
+0

可以使用給我輸出的時候 「無連接」 被替換爲e.getMessage() – 2015-01-21 11:38:12

+0

如果我使用e.getMessage()而不是「無連接」字符串? – Polkovnik 2015-01-21 11:44:02

+0

你得到什麼? – 2015-01-21 11:45:01

回答

0
<?php 
header('Content-Type: application/json'); 
$dbhost ="localhost"; 
$dbuser = "username"; 
$dbpass = "password"; 
$dbdb = "db"; 
$connect = mysql_connect($db_host, $dbuser, $dbpass) or die("connection error"); 

mysql_select_db($dbdb); 
$username =$_POST['username']; 
$password=$_POST['password']; 
$query = mysql_query("SELECT * FROM users WHERE user='$username' AND pass='$password'"); 

    $num = mysql_num_rows($query); 
if($num == 1) 
{ 
while($list=mysql_fetch_assoc($query)) 
{ $output = $list; 
} 
    mysql_close(); 


echo json_encode($output); 


?> 

編輯最終「echou」呼應並添加

header('Content-Type: application/json'); 
+0

現在,如果這是正確的,那麼我想我在Java代碼中有大量的「錯誤」。 – Polkovnik 2015-01-21 14:30:41

+0

你應該調試,看看它失敗 – Badulake 2015-01-21 14:49:44

+0

是的。非常感謝你! – Polkovnik 2015-01-22 16:21:28

0

您必須創建編寫php代碼的web服務。網絡服務可以是肥皂和休息。你必須在http客戶端對象中寫入webservice的url。

通過這樣做,你可以連接android和mysql。

HttpPost postD=new HttpPost("url"); 
+0

我確實在try子句之前寫了這個權限。 'httpClient = new DefaultHttpClient(); httpPost = new HttpPost(「script.php」);' – Polkovnik 2015-01-21 12:07:58

0

你有沒有給你的Android清單的Internet權限?

<uses-permission android:name="android.permission.INTERNET" /> 
+0

是的,我已經獲得了許可。 – Polkovnik 2015-01-21 13:29:14

+0

在這裏發佈您的PHP代碼。您是否將json設置爲PHP中返回值的標頭? header('Content-Type:application/json'); – Badulake 2015-01-21 13:30:55

+0

'<?php $ dbhost =「localhost」; $ dbuser =「username」; $ dbpass =「password」; $ dbdb =「db」; $ connect = mysql_connect($ db_host,$ dbuser,$ dbpass)或死(「連接錯誤」); mysql_select_db($ dbdb); $ username = $ _ POST ['username']; $ password = $ _ POST ['password']; $ query = mysql_query(「SELECT * FROM users WHERE user ='$ username'AND pass ='$ password'」); $ num = mysql_num_rows($ query); 如果($ NUM == 1) { \t而($列表= mysql_fetch_assoc($查詢)) \t { \t \t $輸出= $列表; \t \t echou json_encode($ output); \t} \t mysql_close(); } ?>' 我應該在哪裏設置json作爲標題? – Polkovnik 2015-01-21 13:47:34