java - Volley 库无法将数据发布到服务器
问题描述
我正在为具有登录和注册的 wordpress 网站开发一个 android 应用程序。
我正在使用 volley 库,它可以很好地连接到服务器,
但我的问题是,当我将参数发布到 api 时,它无法创建任何用户。
我的 api 在 POSTMAN 中运行良好,没有问题。
我的api代码是这样的:
这是 DbOperations.php
public function registerUser($email, $username, $password)
{
if (username_exists($username) && email_exists($email)) {
$error = array();
$error['message'] = "username or email exists";
return $error;
}
else {
$user_id = wp_create_user($username, $password, $email);
if (!is_wp_error($user_id))
{
wp_set_password($password,$user_id);
}
else
{
$error = array();
$error['message'] = "can not create user";
return $error;
}
}
}
这是我的 register_user.php 代码:
include ('DbOperations.php');
$dbOperate = new DbOperations();
$username = @($_POST['username']);
$password = @($_POST['password']);
$email=@($_POST['email']);
$regArray = array();
$regArray = $dbOperate->registerUser($email,$username,$password);
print_r(json_encode($regArray));
在此代码之后,这是我的 android studio 代码:这是我在 registerActivity 中编写的方法,当用户单击注册按钮时,此方法执行。所有输入均已设置。
private void DoSignUp()
{
String url = "http://192.168.43.241/wp-includes/rest-api/register_user.php";
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(RegisterActivity.this, "Succeed" + response.toString(), Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(RegisterActivity.this, "Error" + error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("username",RegUser);
params.put("password", RegPass);
params.put("email", RegEmail);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq);
}
我搜索了很多,但没有找到任何东西, 我再说一遍,我的 api 在邮递员中工作得很好。 我使用真实设备来测试我的应用程序。
最后,这是我在 android 上单击注册按钮时得到的:
succeed{"message","can not crate user"}
谢谢你帮助我
解决方案
检查来自 github 的JsonObjectRequest源代码。这个构造函数
public JsonObjectRequest(
int method,
String url,
@Nullable JSONObject jsonRequest,
Listener<JSONObject> listener,
@Nullable ErrorListener errorListener)
接受一个JSONObject
。jsonRequest
用作发布数据。您要发布的数据。从方法文档:
@param jsonRequest 与请求一起发布的 {@link JSONObject}。Null 表示没有 * 参数将与请求一起发布。
null
因此,如果您想发布一些数据,请不要通过。使用您的数据创建一个JsonObject
,例如:
Map<String, String> params = new HashMap();
params.put("param1", 1);
params.put("param2", 2);
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
url, params,
new Response.Listener<JSONObject>() {...}
getParams
方法不起作用,JsonObjectRequest
因为它没有被调用。
推荐阅读
- php - 使用 Bootstrap Treeview Ajax JQuery 和 PHP 制作 Treeview
- excel - 使用 VBA 删除 Excel 中的空行
- mongodb - mongo DB 非法语法
- ocaml - 未绑定模块 PNG
- excel - 使用 SUMPRODUCT 忽略文本
- php - 将平面数组转换为多维数组
- amazon-web-services - AWS SimpleDB BatchPutAttributes 返回 503 服务不可用
- scala - 了解 mllib 滑动
- c# - 缺少定义并且没有可访问的扩展名
- functional-programming - F#:在列表中乘以负数的更优雅的方法