我无法从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."')");
答案 0 :(得分:0)
在原始问题的示例中(&#34;工作&#34;),您正在使用GET来检索值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";
}
这将有效,授予您使用正确的凭据连接到您的数据库并正确复制和粘贴它。是的,您可以直接在双引号("
)中使用变量,这就是为什么我没有使用.
来附加字符串。
如上所述,请阅读以下内容:
Please, don't use
mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 1 :(得分:0)
nameValuePairs用于传递POST HTTP请求的参数。 但是,我看到你的PHP代码正在等待GET请求(?regid)。
将您的网址编辑为
HttpPost httppost = new HttpPost("http://www.domain/newnotifier.php?param1=value1¶m2=value...");