2013-08-06 32 views
0

我無法從Android發送GCM registration_id到我的數據庫。我在我的服務器上有一個腳本,如果我輸入「.... name.php?regid = APA91bHmcD3_yZijf7dmmWlPiyi39Zx2kRTVHdI」,它將起作用。但是,當我嘗試通過Android發送它時,它不會。Android發送長字符串到PHP腳本

這裏是我的代碼:

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."')"); 
+1

發表你的PHP腳本。從你的OG問題來看,你有一個GET的例子,「它有效」,但你使用Java代碼來POST。這兩種方法是有區別的。 – burmat

回答

0

在從原來的問題的例子(即「工程」),您使用GET檢索值regid。當您從上面的代碼發送值時,它使用POST發送regid。使用以下應該在你的腳本工作:

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

而且,將它添加到您try語句獲取服務器響應:

HttpEntity httpEntity = httpResponse.getEntity(); 

UPDATE:

這是一個非常糟糕的這樣做的方式,但這是你的棄用代碼的清理版本,以便它應該工作。您的原始代碼中的name1需要爲$name1。你也有冗餘和無用的陳述。如果您是我最後的上述技巧的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,並使用PDOMySQLi - this article將幫助您決定哪個。如果您選擇PDO,here is a good tutorial

+0

嘿,我試過了,它不起作用。 –

+0

發佈一些你的PHP代碼。 – burmat

+0

我剛剛做到了。事情是,當我通過瀏覽器手動執行它時,它可以工作。當我通過Android實現它時,它不起作用..是否有可能字符串太長而無法通過Android端發送? –

0

nameValuePairs用於傳遞POST HTTP請求的參數。 但是,我發現你的php代碼正在等待一個GET請求(?regid)。

編輯您的網址

HttpPost httppost = new HttpPost("http://www.domain/newnotifier.php?param1=value1&param2=value..."); 
+0

嘿,我試過了,它不起作用。 –