Не удалось отправить параметр в PHP POST-параметр android

В настоящее время я использую Android-зал и пытаюсь выбрать деталь продукта, отправив идентификатор продукта, чтобы получить подробные данные продукта.

JSONObject params = new JSONObject(); try { params.put("ProductID", intent.getStringExtra("productID")); } catch (JSONException e) { e.printStackTrace(); } JsonObjectRequest detailReq = new JsonObjectRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { txtNama.setText(intent.getStringExtra("nama")); txtManufacturer.setText(intent.getStringExtra("namaVendor")); txtHarga.setText("Rp. " + intent.getStringExtra("harga")); try { if(!response.getString("Foto1").equals("")) fotoUrl.add(response.getString("Foto1")); if(!response.getString("Foto2").equals("")) fotoUrl.add(response.getString("Foto2")); if(!response.getString("Foto3").equals("")) fotoUrl.add(response.getString("Foto3")); if(!response.getString("Foto4").equals("")) fotoUrl.add(response.getString("Foto4")); if(!response.getString("Foto5").equals("")) fotoUrl.add(response.getString("Foto5")); txtDesc.setText(response.getString("Deskripsi")); } catch (JSONException e) { e.printStackTrace(); } imageFragmentPagerAdapter.notifyDataSetChanged(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(ProductActivity.this, "Error occurred! Please check your internet connection!", Toast.LENGTH_LONG).show(); } }); AppController.getInstance().addToRequestQueue(detailReq); 

Но метод onErrorResponse всегда вызывается. Это мой php-код:

 <?php require("config.inc.php"); $query = "SELECT Foto1, Foto2, Foto3, Foto4, Foto5, Deskripsi FROM `product` WHERE `ProductID` = '". $_POST['ProductID']."'"; try { $stmt = $db->prepare($query); $result = $stmt->execute(); } catch (PDOException $ex) { die(json_encode($response)); } $row = $stmt->fetch(); if ($row) { echo json_encode($row); } ?> 

Но когда я меняю значение $ _POST ['ProductID'] на, например, '0001', php работает просто отлично. Есть идеи? Заранее спасибо.

  void MakePostRequest() { StringRequest postRequest = new StringRequest(Request.Method.POST, EndPoints.BASE_URL_ADS, new Response.Listener<String>() { @Override public void onResponse(String response) { try { JSONObject jsonResponse = new JSONObject(response); value1= jsonResponse.getString("Your ID1"); value2= jsonResponse.getString("Your ID2"); } catch (JSONException e) { e.printStackTrace(); banner_id = null; full_id = null; } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); value1= null; value2= null; } } ) { // here is params will add to your url using post method @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<>(); params.put("app", getString(R.string.app_name)); //params.put("2ndParamName","valueoF2ndParam"); return params; } }; Volley.newRequestQueue(this).add(postRequest); } 

Этот почтовый запрос использует эту компиляцию com.mcxiaoke.volley:library:1.0.19 volley version.

Я просто добавляю имя приложения в качестве параметра. Вы можете добавить больше параметров.

Удачи

Вам лучше проверить вопрос отдельно для сервера и Android, как вы упомянули, иногда сервер работает хорошо.

Проверка сервера

  1. Вы можете использовать Postman , чтобы проверить, нормально ли сервер, или на каких условиях сервер плохой. Особенно проверьте, что ответ вашего сервера – стандартный формат Json. Если вы хотите сделать это проще, временно измените $_POST на $_GET и установите Chrome JSONView . Затем проверьте его на Chrome.
  2. Проверьте формат ProductID в ваших базах данных. Если это text , вам лучше сначала $product_id = $_POST['ProductID'] , а затем использовать "$product_id"

Проверка Android

  1. Я настоятельно рекомендую использовать StringRequest вместо JsonObjectRequest , вручную преобразовать String в JSONObject . Если строка ответа не является JSONObject, вы можете ее распечатать и найти исключение.
  2. используйте нижеприведенный код для создания параметров JSONObject: Map<String, Object> paramsMap = new HashMap<>(); paramsMap.put("ProductID", 3); JSONObject params = new JSONObject(paramsMap); Map<String, Object> paramsMap = new HashMap<>(); paramsMap.put("ProductID", 3); JSONObject params = new JSONObject(paramsMap);

Надеюсь помочь тебе.

чтобы отлаживать больше, вы можете добавить в верхней части кода php следующий var_dump ($ _ POST); умереть();

а затем увидеть в android, какие значения напечатаны, если вы ничего не получите, это значит, что андроид не отправил запрос правильно.