2012-05-11 39 views
3

我正在开发一个android应用程序,使用PHP/MySQL从应用程序发送数据到服务器以注册/登录用户。我已经写了Javascript和PHP文件来发送和接收JSON数据并将其插入到MySQL数据库中。我遇到的问题是如何处理来自PHP的不同响应。处理不同的PHP回应之后,javascript http post请求

例:

<?php 

    //decode json object 
    $json = file_get_contents('php://input'); 
    $obj = json_decode($json); 

    //variables 
    $user_firstname = $obj->{'user_firstname'}; 
    $user_lastname = $obj->{'user_lastname'}; 
    $user_email = $obj->{'user_email'}; 
    $user_password = $obj->{'user_password'}; 

    if([variables] != null){ 
     //check for an existing email in db 
     mysql_query("Check if email exists"); 

     if(email exist){ 
     //pass a response to java file 
     return user_exists; 
     die(); 
     }else{ 
     //success 
     return success; 
     } 
    } 

?> 

我要的是为了与Android应用程序内的用户交互来处理这些不同的返回值。

回答

1

您可以通过创建关联数组并将其传递给json_encode()来创建json响应,该响应将返回一个可以回显给java客户端的字符串。不要忘记使用header()函数设置appropriate Content-Type header。适当地设置HTTP响应代码也是一个好主意。我想像的是这样的:

$responseArray = array('response' => 'success'); // or 'user_exists' 
$responseJson = json_encode($responseArray); 
header('HTTP/1.1 200 OK'); // or 4xx FAIL_TEXT on failure 
header('Content-Type: application/json'); 
echo $responseJson; 

然后,你将不得不在java客户端解析这个响应。

2

我想你应该为此用户使用HTTP响应代码。例如,当用户成功创建时,您的PHP脚本将返回HTTP 200 - OK,当用户已经存在时,您的PHP脚本将返回HTTP 409 Conflict。这就是RESTfull API通常如何工作的。在Android上,您必须检查状态码并决定要做什么。

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpPost httpget = new HttpPost("http://www.google.com/"); 

HttpResponse response = httpclient.execute(httpget); 
int statusCode = response.getStatusLine().getStatusCode(); 
+0

+1有关http响应代码的好处。 – Asaph