Отправить данные через сообщение Android на PHP

Итак, я пытаюсь отправить сообщение через Post в Android на PHP, вот функция Java Java:

//enviando para o backend private void SendtoPHP(String reg) throws IOException { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://bubbledev.com.br/gcm/getdevice.php"); try{ List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("regid", "" + reg )); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); } catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } } 

PHP:

 <?php include 'conecta.php'; $device_token = urldecode($_POST['regid']); $sql = "INSERT INTO corposa.deviceandroid" . " (id,device_token)" . " VALUES (NULL,'$device_token')"; mysqli_query($con,$sql); 

?>

PHP очень хорош, я уже тестировал его с другой почтой и работал, но когда функция Android пытается $ device_token не получать какое-либо значение, а SQL сохраняет «» с идентификатором за столом

Я использую этот код, который похож на ваш, кроме ResponseHandler. Меня устраивает.

 HttpClient Client = new DefaultHttpClient(); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("id", sID)); nameValuePairs.add(new BasicNameValuePair("etc", sETC)); try { String SetServerString = ""; HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://your-url.com/script.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); ResponseHandler<String> responseHandler = new BasicResponseHandler(); SetServerString = httpclient.execute(httppost, responseHandler); } catch(Exception ex) { // failed } 

Я уверен, что есть лучшие способы сделать это, но я обычно обрабатываю почтовые запросы от Android:

 <?php { $input = json_encode(file_get_contents("php://input")); $deviceToken = $input->regId; mysqli_query($connection, "INSERT INTO corposa.deviceandroid (`id`, `device_token`) VALUES(NULL, '" . mysqli_real_escape_string($deviceToken) . "')"; } 

Кроме того, поскольку вы используете POST вместо GET, данные, передаваемые на сервер, не кодируются url, поэтому urldecode здесь не нужен.

Код выглядит нормально, только «странная» вещь:

 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

потому что вы добавляете в список только один элемент BasicNameValuePair. Может быть, это проблема …?

Я использую этот код в своем текущем проекте, надеюсь, он тоже работает для вас

  Map<String, String> kvPairs = new HashMap<String, String>(); kvPairs.put("regid", reg); HttpClient httpclient = this.getNewHttpClient(); HttpPost httppost = new HttpPost("http://bubbledev.com.br/gcm/getdevice.php"); if (kvPairs != null && kvPairs.isEmpty() == false) { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size()); String k, v; Iterator<String> itKeys = kvPairs.keySet().iterator(); while (itKeys.hasNext()) { k = itKeys.next(); v = kvPairs.get(k); nameValuePairs.add(new BasicNameValuePair(k, v)); } httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); } HttpResponse response; response = httpclient.execute(httppost); String responseString = EntityUtils.toString(response.getEntity()); 

Также нужен этот метод в вашем классе

 public static HttpClient getNewHttpClient() { try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); SSLSocketFactory sf = new RecorridoSSL(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); return new DefaultHttpClient(ccm, params); } catch (Exception e) { return new DefaultHttpClient(); } } 

надеюсь, что я ничего не забыл, иначе расскажи мне

Ребята, ошибка была в моем PHP

 $device_token = urldecode($_POST['regid']); 

Этот urlecode испортился с моим кодом haha

Thx за помощь