2013-08-06 4 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 스크립트로 URL입니다. OG 질문에서 "작동"하는 GET 예제가 있지만 아직 POST에 Java 코드를 사용하고 있습니다. 이 두 가지 방법의 차이점이 있습니다. – burmat

답변

0

원래 질문의 예에서는 ("작품"는), 당신은 값 regid을 검색하는 GET을 사용하고 있습니다. 위 코드에서 값을 보내려면 POST를 사용하여 regid을 보냅니다. 다음을 사용하여 스크립트에서 작동합니다 : 또한

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

를, 서버의 응답을 얻기 위해 문을하려고이 추가 :

HttpEntity httpEntity = httpResponse.getEntity(); 

UPDATE :

이 매우 나쁘다 그것을하는 방법, 그러나 이것은 작동해야합니다 그래서 당신의 비추천 코드의 청소 버전입니다. 원래 코드의 name1$name1이어야합니다. 당신은 또한 중복되고 쓸모없는 if 진술을했습니다. 이것은 작동

$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"; 
} 

, 당신은 당신의 데이터베이스에 연결하기 위해 올바른 자격 증명을 사용하고 복사을 제대로에 붙여 부여하십시오 echo 문은 당신이 내 마지막 위의 팁을 따른다면 httpEntity로 장치에 반환됩니다. 그리고 네, 변수를 큰 따옴표 (")로 직접 사용할 수 있습니다. 그래서 나는 .을 사용하여 문자열을 추가하지 않았습니다.

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입니다.

+0

이봐,이 시도하고 작동하지 않습니다. –

+0

일부 PHP 코드를 게시하십시오. – burmat

+0

방금했습니다. 것은 브라우저를 통해 수동으로 작업 할 때 작동합니다. 안드로이드를 통해 그것을 할 때, 그것은 작동하지 않습니다. 문자열이 너무 길어서 안드로이드 쪽을 통해 보낼 가능성이 있습니까? –

0

nameValuePairs는 POST HTTP 요청에 대한 매개 변수를 전달하는 데 사용됩니다. 그러나 귀하의 PHP 코드가 GET 요청 (? regid)을 기다리고 있습니다.

편집

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

이봐,이 시도하고 작동하지 않습니다. –

관련 문제