我目前正在使用android volley并尝试通过发送productID来选择产品详细信息以获取产品的详细数据。
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工作得很好。任何的想法?提前谢谢。
答案 0 :(得分:2)
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
排球版。
我只是添加应用名称作为参数。您可以添加更多参数。
祝你好运
答案 1 :(得分:1)
你最好单独检查服务器和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);
希望能帮到你。
答案 2 :(得分:0)
要调试更多,你可以在php代码的顶部添加以下内容 后续代码var_dump($ _ POST);死();
然后在android中看到打印的值是什么,如果你什么都没得,那就意味着android没有正确发送请求。