У меня есть скрипт php, в котором я проверяю количество неоплаченных билетов, принадлежащих пользователю. Когда я вызываю сценарий в веб-браузере и передаю ему идентификатор пользователя, я получаю ожидаемый ответ, то есть -> ["unpaid_tickets","5","success"].
Однако, когда я вызываю тот же сценарий из приложения Android через volley или StringRequest библиотеки JsonArrayRequest, я продолжаю получать ноль для значения от количества билетов, несмотря на использование одного и того же идентификатора пользователя. ответ -> ["unpaid_tickets","0","success"].
Как я могу исправить эту проблему? Я попытался добавить параметр к функции json_encode(), такой как JSON_NUMERIC_CHECK, но безрезультатно. Любая помощь будет оценена по достоинству.
Скрипт PHP:
$userid = $_GET['userid'];
$conn = mysqli_connect("localhost",$username,$password,$database) or die('Cannot connect to database');
$sql = "SELECT COUNT(*) AS unpaid_tickets FROM tbl_tickets WHERE userid ='$userid' AND pay_status ='reserved'";
$result = mysqli_query($conn,$sql) or die('Cannot execute query: '.mysqli_error($conn));
if ($result){
$row=mysqli_fetch_row($result);
$tickets = $row[0];
echo json_encode(array('unpaid_tickets',$tickets,'success'));
// echo $tickets;
}else{
echo json_encode(array('unpaid_tickets','0-0'));
}
Код Android:
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, AppController.getInstance().getURL(AppConst.TAG_URL_CHECK_UNPAID_TICKETS).equals("") ? AppConst.URL_CHECK_UNPAID_TICKETS : AppController.getInstance().getURL(AppConst.TAG_URL_CHECK_UNPAID_TICKETS), null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.i(TAG,"user id -> "+AppController.getInstance().getPrefManager().getUserId());
Log.w(TAG,"ticket check response -> "+response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG,"processUnpaidTicket() volley -> "+error.toString());
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<>();
params.put(AppConst.TAG_USER_ID, AppController.getInstance().getPrefManager().getUserId());//add user id to request
return params;
}
};
Вам нужно будет показать свой PHP-код, работающий с данными POST (или get или php: // input). Скорее всего, ваше приложение для Android отправляет необработанные данные, но ваш php-скрипт использует только $ _GET или $ _POST для чтения 'id'.
@IncredibleHat добавил скрипт php
использовал как GET, так и POST, получая одинаковый результат @IncredibleHat
Ага. Это должно быть способ, которым приложение Android вызывает запрос. Если и get, и post не работают, вы можете попробовать отладку, указав это вверху: echo file_get_contents('php://input'); Если он выводит что-то похожее на ваш идентификатор пользователя, то это то место, куда оно передается.
Возможно, вам также придется добавить короткий блок кода Android, чтобы узнать, как вы используете StringRequest, JsonArrayRequest или даже JsonObjectRequest. Насколько я понимаю, должен передает значение URL-адреса в качестве параметра GET.
Я добавил код Android @IncredibleHat






К сожалению, это не лучший вопрос для этого сайта. См. как спросить, прочтите тур SO.