[英]Android Volley - POST-Parameter not reaching PHP-Script
I want to get Infos from a Database. 我想从数据库中获取信息。 When i use a Query without parameters (eg "Select * from users;" my script works fine. 当我使用不带参数的查询时(例如“从用户中选择*”;我的脚本可以正常工作)。
Now i have the following script which returns an empty Array. 现在,我有以下脚本,该脚本返回一个空数组。 When i replace the $groupId in script with a string value (eg "Group1") it returns the expected Items. 当我用字符串值(例如“ Group1”)替换脚本中的$ groupId时,它将返回预期的项目。
<?php
$sql = "";
if($_SERVER['REQUEST_METHOD']== 'POST') {
$flag = array();
$groupId = $_POST['groupId'];
require_once('dbConnect.php');
$sql = "SELECT * FROM users where groupId = '$groupId'";
if($out = mysqli_query($con,$sql)){
//echo "Successfully Registered";
while($row = mysqli_fetch_array($out))
{
$flag[] = $row;
}
print(json_encode($flag));
}else{
echo "Could not register";
}
}else{
echo 'error';
}
//mysqli_close($con);
?>
When i call the following function with the hashmap hashMapGetNames.put("groupId", "Group#1");
当我使用哈希映射hashMapGetNames.put("groupId", "Group#1");
调用以下函数hashMapGetNames.put("groupId", "Group#1");
then i get an empty array and the info: "No, Group ID is not set" 然后我得到一个空数组和信息:“否,未设置组ID”
public ArrayList<String> get(String url, final HashMap<String, String> hashMap, final Context context) {
//Download the items from DB
final ArrayList<String> items = new ArrayList<>();
RequestQueue queue = Volley.newRequestQueue(context);
JSONObject parameters = new JSONObject(hashMap);
final JsonRequest<JSONArray> jsonArrayRequest = new
JsonRequest<JSONArray>(Request.Method.GET, url, parameters.toString(),
new com.android.volley.Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
if(jsonArray == null){
Log.d("Downloader", "FAIL: NO NAMES FOUND");
}
else {
for (int zähler = 0; zähler < jsonArray.length(); zähler++){
try {
Log.d("Downloader", "sind bei zähler " + zähler);
JSONObject object = jsonArray.getJSONObject(zähler);
String name = object.getString("name");
Log.d("Name", name);
items.add(name);
}
catch (JSONException e) {
Log.d("Downloader", "Catching exception");
e.printStackTrace();
}
}
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Downloader", "Error: " + error.toString());
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Log.d("Downloader", "gettingParams");
return hashMap;
}
@Override
protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
Log.d("Downloader", "parsing Network response");
try {
String jsonString = new String(response.data,
HttpHeaderParser
.parseCharset(response.headers));
Log.d("Downloader", "Parsing success");
return Response.success(new JSONArray(jsonString),
HttpHeaderParser
.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
Log.d("Downloader", e.toString());
return Response.error(new ParseError(e));
} catch (JSONException je) {
Log.d("Downloader", je.toString());
return Response.error(new ParseError(je));
}
}
};
queue.add(jsonArrayRequest);
return items;
}
So the Script seems right but the parameter does not reach the Script. 因此 ,脚本似乎正确,但是参数未到达脚本。 Any Ideas where the error could hide? 有任何想法可以隐藏错误吗?
EDIT: I edited the code like shown in the tutorial commented below and use the same dbConnect.php file. 编辑:我编辑了下面注释的教程中所示的代码,并使用相同的dbConnect.php文件。 but it prints out error - so the problem still exist. 但它会打印出错误-因此问题仍然存在。 That means that the Request Method is not "Post". 这意味着请求方法不是“发布”。 Android Monitor prints out: Android Monitor打印出:
parsing Network response 解析网络响应
Downloader: Parsing success 下载器:解析成功
Error: com.android.volley.ParseError: org.json.JSONException: End of input at character 0 错误:com.android.volley.ParseError:org.json.JSONException:输入在字符0处结束
try this code... 试试这个代码...
@Override
protected Map<String, String> getParams() throws AuthFailureError {
//Creating parameters
Map<String,String> params = new Hashtable<String, String>();
//Adding parameters
params.put("groupId", "122");
//returning parameters
return params;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.