我正在制作一个使用 Volley 调用 PHP 脚本以访问 MySQL 服务器的 Android 应用程序。但是,我通过 GET 发送的参数是空的。当我使用 Postman 测试通话时,它会起作用。这是安卓代码:
RequestQueue queue = Volley.newRequestQueue(this);
String url = "http://lastboxusa.com/php/PLogin.php";
HashMap<String, String> params = new HashMap<String, String>();
params.put("username", username);
params.put("password", password);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, new JSONObject(params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.d("Response = " + response.toString());
String result = response.get("Result").toString();
VolleyLog.d("Result = " + result);
if (result.equals("Disallow")) {
Toast.makeText(context, "Invalid Username and/or Password.", Toast.LENGTH_LONG).show();
} else if (result.equals("Customer")) {
Toast.makeText(context, "Customer Logged In", Toast.LENGTH_LONG).show();
// Customer Login
} else if (result.equals ("Rep")) {
Toast.makeText(context, "Rep Logged In", Toast.LENGTH_LONG).show();
// Rep Login
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
try {
VolleyLog.e("Status Code: ", String.valueOf(error.networkResponse.statusCode));
VolleyLog.e("Error: ", new String(error.networkResponse.data, "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
};
queue.add(request);
这是PHP:
header('Content-Type: application/json; charset=utf-8');
$con = mysqli_connect('domain', 'username', 'password', 'db') or die("Connection Failed");
$username = $_GET['username'];
$password = $_GET['password'];
$result = mysqli_query($con, "SELECT * FROM `Users` WHERE `Username` = '$username' AND `Password` = '$password'");
if ($result && $result->num_rows > 0) {
$ans = $result->fetch_assoc()['UserType'];
$response['Result'] = $ans;
$response['Username'] = $username;
$response['Password'] = $password;
} else {
$response['Result'] = "Disallow";
$response['Numrows'] = $result->num_rows;
$response['Username'] = $username;
$response['Password'] = $password;
}
echo json_encode($response);
mysqli_close($con);
预期输出(当提供 username=testrep, password=test 时 Postman 的实际输出):
{"Result": Rep, "Username": "testrep", "Password", "test"}
提供相同值时代码的实际输出:
{"Result": "Disallow", "Numrows": 0, "Username": null, "Password": null}
如果使用 Volley get 请求发送,则只能在 url 后面拼接参数。
String url="http://lastboxusa.com/php/PLogin.php?username"+username+"&password"+password;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句