php - Android - Volley 未发送我的 GET 或 POST 参数
问题描述
我正在构建一个 Android 应用程序,用于查询我的在线服务器以获取数据,登录信息就是其中之一。
我有这个登录功能,我在其中向我拥有的 php 脚本发出请求。
public void login(final String username, final String password, Context context, final requestHandler listener) {
final String requestUrl = "http://www.my-url.com/folder/folder/folder/script.php";
JSONObject object = new JSONObject();
try {
// TODO: handle loggedInUser authentication
//input your API parameters
object.put("user_identifier ", username);
object.put("password", password);
} catch (Exception e) {
Log.e(TAG, "error logging in = " + e);
new Result.Error(new IOException("Error logging in", e));
}
HashMap<String, String> params = new HashMap<>();
params.put("user_identifier", username);
params.put("password", password);
params.put("Content-Type", "application/json");
StringRequest sr = new StringRequest(Request.Method.POST, requestUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("HttpClient", "success! response: " + response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("HttpClient", "error: " + error.toString());
}
})
{
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<>();
params.put("user_identifier", username);
params.put("password", "hello_World");
return params;
}
};
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, requestUrl, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override public void onResponse(JSONObject response) {
//the response contains the result from the server
// a json string or any other object returned by your server
Log.e(TAG, "Response: " + response.toString());
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("yyyy/MM/dd hh:mm a");
gson = gsonBuilder.create();
ServerResponse serverResponse = gson.fromJson(response.toString(), ServerResponse.class);
Result<UserModel> result;
if(serverResponse.isSuccess()){
UserModel userModel = gson.fromJson(serverResponse.getData(), UserModel.class);
result = new Result.Success<>(userModel);
listener.passResult(result);
}
else {
result = new Result.Error(new IOException("Error code: " + serverResponse.getMessage()));
}
listener.passResult(result);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "volley error jsonObject = " + error);
error.printStackTrace(); //log the error resulting from the request for diagnosis/debugging
}
});
Volley.newRequestQueue(context).add(jsonRequest);
Volley.newRequestQueue(context).add(sr);
}
现在,PHP 将只获取请求,然后处理它。它返回一个 JSONObject,然后由我制作的 Android App 解析。请注意,我之前可以提出请求。但突然间,我得到一个空白响应,这导致解析 JSONObject 结果时出错。StringRequest 还返回一个长度为 0 的字符串。
很明显,有些不对劲。我使用 apirequest.io 测试了我的 PHP 脚本,我的脚本能够接收、处理和输出正确的结果。
很明显,我的安卓系统有问题。为了确保我的 PHP 运行良好,在处理输入之前,我有这个块:
print_r($_REQUEST);
var_dump($_REQUEST);
print_r($_POST);
var_dump($_POST);
print_r($_GET);
var_dump($_GET);
但是当我再次运行登录功能时,我没有从我的服务器获得任何信息。转储$_REQUEST
参数只会给出一个空白。请注意,当我使用 apirequest.io 时,PHP 脚本仍然可以正常运行。Android Volley 如何构建我的请求并将它们发送到服务器显然有些奇怪。
直到我硬编码 url 中的值,例如:requestUrl?name_1=value1&name2_value2..
PHP 显示它能够接收$_GET
请求中的参数。
这令人难以置信。
我现在很困惑,似乎 Volley 突然停止了正确构建我的请求,因此,我的参数被删除了。
有人可以指出我做错了什么吗?
解决方案
推荐阅读
- php - 无法在 html2pdf 中下载 pdf
- flutter - 如何在 Flutter 中使用嵌套(或多个)Future.builder?
- php - 为什么通过 PhpUnit 运行测试时找不到我的自定义 TestCase 类?
- r - 如何使用 Linux Debian 正确安装 R keras
- laravel - 即使在成功认证后,Laravel Sanctum 在实时服务器上的认证失败
- java - Java 无法打开 Optifine
- python - Flask 到 Django 的转换,flask.url_for,flask.request.url
- flutter - 如何将 woocommerce 集成到 Flutter 应用程序中
- javascript - 通过 JavaScript 或 JQuery 对数组进行排序
- node.js - GraphQL 网关`预检请求未通过访问控制检查`