我正在为具有登录名和密码的wordpress网站开发一个android应用程序 注册。
我正在使用排球库,它很好地连接到服务器
但我的问题是,当我将参数发布到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"}
感谢您的帮助
答案 0 :(得分:0)
从github检查JsonObjectRequest源代码。构造函数
public JsonObjectRequest(
int method,
String url,
@Nullable JSONObject jsonRequest,
Listener<JSONObject> listener,
@Nullable ErrorListener errorListener)
接受JSONObject
。 jsonRequest
用作发布数据。您要发布的数据。从方法文档中:
@param jsonRequest一个{@link JSONObject}与请求一起发布。空表示否 *参数将与请求一起发布。
因此,如果要发布一些数据,请不要传递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
,因为它没有被调用。
答案 1 :(得分:0)
好,由于没人帮我,我尝试了一下,找到了答案, 问题是由于使用JsonObjectRequest,当我使用JSONObjectRequest时,齐射将数据作为json对象发送,并且我的api被设计为可以工作并接收字符串,因为我使用了以下几行代码:
$username = @($_POST['username']);
$email=@($_POST['email']);
$password = @($_POST['password']);
所以我改用下面的代码:
private void DoSignUp()
{
StringRequest strReq = new StringRequest(Request.Method.POST,
url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(RegisterActivity.this, ""+response.toString(), Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(RegisterActivity.this, ""+error.toString(), Toast.LENGTH_SHORT).show();
}
}) {
@Override
public Map<String, String> getParams() {
// Posting params to register url
Map<String, String> params = new HashMap<String, String>();
params.put("username", edtUserR.getText().toString().trim());
params.put("email", edtEmailR.getText().toString().trim());
params.put("password", edtPassR.getText().toString().trim());
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq);
}
}
对我来说很好。 多亏我自己。