Я пытаюсь отправить данные 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
Спасибо за любую идею!
Не могли бы вы добавить 'e.printStackTrace()' в последнее предложение 'catch'? Затем добавьте всю трассировку стека после запуска приложения снова – Mikhail
06-25 14: 07: 12.979: E/sendPurchase (21833): Не удалось отправить запрос HTTP POST из-за: java.lang.NullPointerException –
@AnoopM это просто его обычай сообщение об исключении, в нем ничего не говорится о том, где произошел NPE. – Mikhail