0

我无法从 Android 向我的数据库发送 GCM registration_id。我的服务器上有一个脚本,如果我输入“....name.php?regid=APA91bHmcD3_yZijf7dmmWlPiyi39Zx2kRTVHdI”它将起作用。但是,当我尝试通过 Android 发送它时,它不会。

这是我的代码:

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.domain.com/newnotifier.php");
    Log.d("TAG", regid);
    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("regid", regid));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
} 

只需要知道为什么这不起作用。我查看了我的 logcat,它显示了整个 id 被发送过来。

谢谢,

编辑:它没有给出错误,它只是没有在数据库中显示任何内容。编辑 2:PHP 代码

$con = mysql_connect($mysql_host,$mysql_user,$mysql_password);
if (!$con)
{
   die('Could not connect: ' . mysql_error());
}

if ($con) 
{

}

 mysql_select_db($mysql_database, $con);
 name1 = $_REQUEST['regid'];
$sqldo = mysql_query("INSERT into users(regid) VALUES('".$name1."')");
4

2 回答 2

0

在您原始问题的示例中(“有效”),您正在使用 GET 来检索 value regid。当您从上面的代码中发送值时,它使用 POST 发送regid。使用以下内容应该可以在您的脚本中使用:

<?php
    $regid = $_POST['regid'];
?>

此外,将此添加到您的 try 语句以获取服务器响应:

HttpEntity httpEntity = httpResponse.getEntity();

这是一种非常糟糕的做法,但这是已弃用代码的清理版本,因此它应该可以工作。name1在您的原始代码中需要是$name1. 你也有多余和无用的if陈述。声明将echo返回到您的设备,httpEntity就像您遵循我上面的最后一个提示一样:

$con = mysql_connect($mysql_host,$mysql_user,$mysql_password);

if ($con) {

    if (mysql_select_db($mysql_database, $con)) {
        $name1 = $_POST['regid'];
        $insert = "INSERT into users(regid) VALUES('$name1')";
        $sqldo = mysql_query($insert);

        if ($sqldo) {
            echo "query run";
        } else {
            echo "query failed";
        }

    } else {
        echo "could not select database";
    }

} else {
    echo "could not connect to server";
}

这将起作用,如果您使用正确的凭据连接到数据库并且您正确复制并粘贴它。是的,您可以直接在双引号 ( ") 中使用该变量,这就是我不使用.附加字符串的原因。

综上所述,请阅读以下内容:

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-08-06T01:07:06.473 回答
0

nameValuePairs 用于为 POST HTTP 请求传递参数。但是,我看到您的 php 代码正在等待 GET 请求(?regid)。

将您的网址编辑为

HttpPost httppost = new HttpPost("http://www.domain/newnotifier.php?param1=value1&param2=value...");
于 2013-08-06T01:07:47.230 回答