2013-05-08 3 views
0

Я пытаюсь создать веб-сервис для своего приложения для Android. Но у меня возникла проблема с отправкой параметров на php. Я использую эти кодовые блоки для Http-Post.Как получить json-объект от android до php

public String requestJson(String method, JSONObject parameters) { 
     try { 
      int TIMEOUT_MILLISEC = 10000; 
      HttpParams httpParams = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC); 
      HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC); 
      HttpClient client = new DefaultHttpClient(httpParams); 

      String tmpUrl = serviceUrl.trim() + (serviceUrl.trim().endsWith("/") ? method : "/" + method); 

      HttpPost request = new HttpPost(tmpUrl); 

      request.setHeader(HTTP.CONTENT_TYPE, "application/json; charset=utf-8"); 

      if (parameters != null) 
      { 
       request.setEntity(new StringEntity(parameters.toString(), HTTP.UTF_8)); 
      } 

      HttpResponse response = client.execute(request); 

      final int statusCode = response.getStatusLine().getStatusCode(); 
      final String jsonResponse = EntityUtils.toString(response.getEntity()); 

      if (statusCode != HttpStatus.SC_OK) { 
       Log.w(TAG, "Error in web request: " + statusCode); 
       Log.w(TAG, jsonResponse); 
       return null; 
      } else { 
       Log.i(TAG, jsonResponse); 
       return jsonResponse; 
      } 
     } catch (Exception e) { 
      Log.e(TAG, "Error in fetching JSON due to -> " + e.toString()); 
     } 
     return null; 
    } 


    public String testFunction() { 
     try { 
      JSONObject param = new JSONObject(); 
      param.put("testID", 123); 
      JsonCevabi = requestJson("test.php", param); 

      if (JsonCevabi != null) { 
       JSONObject jo = new JSONObject(JsonCevabi); 
       JSONArray ja = new JSONArray(jo.getString("d")); 

       @SuppressWarnings("unchecked") 
       List<SampleEntity> resultList = (List<SampleEntity>) new Gson().fromJson(ja.toString(), new TypeToken<List<SampleEntity>>() { 
       }.getType()); 
       return JsonCevabi; 
      } 
      else 
       return null; 
     } catch (Exception e) { 
      return null; 
     } 
    } 

И мой код php, подобный этому;

<?php 

$id = json_decode($_POST['testID']); 


$json = "{d:[{sample1:'".$id."',sample2:'value12'}]}"; 
$response = $_GET["callback"] . $json; 
echo $response; 
?> 

То, что я пытаюсь сделать, это отправить параметр TestID на php. И я продолжаю возвращать меня к этой ценности.

Но я получаю {d: [{sample1: '', sample2: 'value12'}]}

Что я хочу {d: [{sample1: '123', sample2: 'value12' }]}

Что мне не хватает?

EDIT: я нашел аналогичный вопрос, но не помог; Android JSON HttpClient to send data to PHP server with HttpResponse

ответ

2

Как @chandresh_cool сказал, что есть проблема с параметрами POST. Вы должны отредактировать свою StringEntity следующим образом: new StringEntity("testID="+parameters.toString(), HTTP.UTF_8).

Затем на сервере переменная $ идентификатор содержит расшифрованной JSON, так что вы должны сделать:

$id = json_decode($_POST['testID'], true); 
$json = "{d:[{sample1:'".$id['testID']."',sample2:'value12'}]}"; 
+0

Я попробовал то, что вы сказали. но не повезло. я должен делать что-то неправильно. –

1

Похоже

$_POST['testID'] 

является проблемой. Вы отправляете переменную, используя метод post?

+0

Я думаю, в testFunction вот так; JSONObject param = new JSONObject(); param.put ("testID", 123); –

1

Изменение кода PHP для следующих решить мою проблему.

<?php 
$postdata = $HTTP_RAW_POST_DATA; 
$data = json_decode($postdata); 
$id = $data->testID; 
$json = "{d:[{sample1:'".$id."',sample2:'value12'}]}"; 
$response = $_GET["callback"] . $json; 
echo $response; 
?> 

http://fahmirahman.wordpress.com/2011/04/26/the-simplest-way-to-post-parameters-between-android-and-php/

Более подробную информацию можно найти ссылку выше.

+1

После некоторого расследования я обнаружил, что $ _POST используется только тогда, когда тип содержимого является «application/x-www-form-urlencoded» или 'multipart/form-data' – user2340612

1
@Java Code to send data: 

StringEntity entity = new StringEntity("jsonRequest="+data.toString(), HTTP.UTF_8);     
httpPost.setEntity(entity); 
response = httpClient.execute(httpPost); 
HttpEntity entityPost = response.getEntity(); 
result = EntityUtils.toString(entityPost); 
return result; 

@PHP code to receive data 
$jsonRequest = json_decode($_REQUEST['jsonRequest'], true); 

@check if the data is coming we can log the contents 
date_default_timezone_set('EST'); 

ini_set("log_errors", 1); 
ini_set("error_log", "site.log"); 
error_log("Hello, errors!".print_r($jsonRequest[id],1)); 
Смежные вопросы