2015-07-07 4 views
0

Я пытаюсь отправить данные json в php-скрипт из приложения Android с HttpUrlConnection и получить ответ.Ответ Android HttpUrlConnection

Android код

private void sendPurchase(String SKU) throws IOException{  
    try{ 
     int pur_user = prefs.getInt("CONF_user", Integer.MIN_VALUE); 
     URL url = new URL("http://www.example.com/includes/purchase.php"); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setDoInput(true); 
     connection.setRequestProperty("Content-Type", "application/json"); 
     connection.setRequestProperty("Accept", "application/json"); 
     connection.setRequestMethod("POST"); 
     JSONObject jsonObject = new JSONObject(); 
     jsonObject.put("PUR_sku", SKU); 
     jsonObject.put("PUR_user", pur_user); 
     String json = jsonObject.toString(); 
     OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 
     writer.write(json); 
     writer.close(); 
     int responseCode = connection.getResponseCode(); 
     if(responseCode == 200) { 
      InputStream content = connection.getInputStream(); 
      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(content, "UTF-8"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line; 
       while ((line = reader.readLine()) != null){ sb.append(line).append("\n"); } 
       Log.e("sendPruchase",sb.toString()); 
       content.close(); 
      } catch (Exception ex) { Log.e("sendPurchase", "Failed to parse JSON due to: " + ex); } finally { connection.disconnect(); } 
     } else { Log.e("sendPurchase", "Server responded with status code: " + responseCode); } 
    } catch(Exception ex) { Log.e("sendPurchase", "Failed to send HTTP POST request due to: " + ex); } 
} 

И PHP скрипт

<? 
$auth=0; 
require('./connexion.php'); 
$data = file_get_contents('php://input'); 
//$data = '{"PUR_sku":"singleone","PUR_user":"3"}'; 
$json = json_decode($data,true); 
/* Some database stuff ... */ 
echo "Retour ".print_r($json)." et ".$json['PUR_sku']." et ".$json['PUR_user']; 
?> 

Мой код о покупке товара, потреблять его и отправить новое значение в моей базе данных на веб-сервере. Покупка & потребляется, но я не могу отправить эти значения на веб-сервер. И снова, когда я выполняю скрипт php самостоятельно в веб-браузере, заменяя первую строку данных на вторую (см. Скрипт), все в порядке. Обратите внимание, что у меня есть другой похожий код для регистрации пользователя в GCM, и этот код работает нормально.

06-25 14:07:12.968: D/IabHelper(21833): Successfully consumed sku: singleconf 
06-25 14:07:12.968: D/IabHelper(21833): Ending async operation: consume 
06-25 14:07:12.979: D/CONSUME(21833): Consumption finished. Purchase: PurchaseInfo(type:inapp):{"orderId":"12999763169054705758.1353445524837889","packageName":"com.*.*","productId":"singleconf","purchaseTime":1435234296875,"purchaseState":0,"purchaseToken":"bohbcbiigcbidfficbikebnk.AO-J1OzuQ_SsNTG1h9MtUvbaPc3PeN9nBHG-qBOE82ao1rTDFNrgA7tYQcMdECxCVFrrZEn_QifQ28OcIupyesZI-5cjDILFODYpBEaeqMfE0wCAeMFkJLfNUK_TsKPMj7F2sBDdgOYx"}, result: IabResult: Successful consume of sku singleconf (response: 0:OK) 
06-25 14:07:12.979: D/CONSUME(21833): You bought & consumed a single conf 
06-25 14:07:12.979: D/CONSUME(21833): End consumption flow. 
06-25 14:07:12.979: E/Purchase Background(21833): Inside doInBackground 
06-25 14:07:12.979: E/sendPurchase(21833): Failed to send HTTP POST request due to: java.lang.NullPointerException 

Спасибо за любую идею!

+0

Не могли бы вы добавить 'e.printStackTrace()' в последнее предложение 'catch'? Затем добавьте всю трассировку стека после запуска приложения снова – Mikhail

+0

06-25 14: 07: 12.979: E/sendPurchase (21833): Не удалось отправить запрос HTTP POST из-за: java.lang.NullPointerException –

+0

@AnoopM это просто его обычай сообщение об исключении, в нем ничего не говорится о том, где произошел NPE. – Mikhail

ответ

-1

Android Side:

private void sendPurchase(String SKU) { 

    /** 
    * Initialize All Variables 
    */ 

    httpPost = new HttpPost(url.toString()); 

    pairs = new ArrayList<NameValuePair>(); 

    JSONObject jsonObject = new JSONObject(); 
    jsonObject.put("PUR_sku", SKU); 
    jsonObject.put("PUR_user", pur_user); 

    pairs.add(new BasicNameValuePair("data", jsonObject.toString())); 

    httpPost.setEntity(new UrlEncodedFormEntity(pairs,HTTP.UTF_8)); 

    response = httpClient.execute(httpPost); 

    entity = response.getEntity(); 
    is = entity.getContent(); 

    /* Convert response to string */ 
    result = getResult(is); 

    Log.d(TAG, "Response of Send Result : " + result); 
} 

PHP Side:

$data = json_decode($this->input->post('data'), true); 

/** Your Process **/ 

мая он будет поможет вам.

+0

Что-то пошло не так, я получаю эту ошибку« Не удалось отправить HTTP-запрос POST из-за: java.lang.ClassCastException: org.apache.http.message.BasicHttpResponse нельзя передать в java.io.InputStream « –

+0

Что ты наделал? –

+0

Я исправил эту проблему, но реальная проблема, похоже, исходит со стороны PHP. [Я разместил здесь новый вопрос, если вы хотите посмотреть] (http://stackoverflow.com/questions/31297639/php-script-error-when-called-from-android-httpclient/31298070#31298070) –

Смежные вопросы