В настоящее время я использую Android Volley и пытаюсь выбрать сведения о продукте, отправив идентификатор продукта, чтобы получить подробные данные о продукте.
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
залповая версия.
Я просто добавляю имя приложения в качестве параметра. Вы можете добавить больше параметров.
Удачи
Вам лучше проверить вопрос отдельно для сервера и Android, как вы упоминали, иногда сервер работает хорошо.
$_POST
в $_GET
и установите Chrome JSONView. Тогда проверьте это своим Chrome.ProductID
Формат в ваших базах данных. Если это text
лучше сначала $product_id = $_POST['ProductID']
, а затем использовать "$product_id"
StringRequest
вместо JsonObjectRequest
, вручную конвертировать String
в JSONObject
, Если строка ответа не является JSONObject, вы можете распечатать ее и найти исключение.
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("ProductID", 3);
JSONObject params = new JSONObject(paramsMap);
Надеюсь помочь вам.
Чтобы отладить больше, вы можете добавить в верхней части кода PHP следующий
var_dump ($ _ POST); умереть();
а затем посмотрите в андроиде, какие значения напечатаны, если вы ничего не получите, значит андроид не отправил запрос правильно.