2015-01-21 70 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