Volley Library Cant Post 数据到服务器
Volley Library Cant Post Data To Server
我正在为一个 wordpress 站点开发一个 android 应用程序
注册.
我正在使用 volley 库,它可以很好地连接到服务器,
但我的问题是,当我 post 参数到 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 工作室代码:
这是我在 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 在 postman 里面工作得很好。
我使用真实设备来测试我的应用程序。
最后这就是我在 android 上单击注册按钮时得到的结果:
succeed{"message","can not crate user"}
谢谢你帮助我
检查 JsonObjectRequest 来自 github 的源代码。这个构造函数
public JsonObjectRequest(
int method,
String url,
@Nullable JSONObject jsonRequest,
Listener<JSONObject> listener,
@Nullable ErrorListener errorListener)
接受一个JSONObject
。 jsonRequest
用作 post 数据。你要的数据post。来自方法文档:
@param jsonRequest A {@link JSONObject} to post with the request. Null indicates no
* parameters will be posted along with request.
因此,如果您想 post 一些数据,请不要传递 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
不起作用,因为它未被调用。
好的,既然没人帮我,我自己试了一下,找到了答案,
问题是因为使用 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);
}
}
对我来说效果很好。
感谢我自己。
我正在为一个 wordpress 站点开发一个 android 应用程序 注册.
我正在使用 volley 库,它可以很好地连接到服务器,
但我的问题是,当我 post 参数到 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 工作室代码: 这是我在 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 在 postman 里面工作得很好。 我使用真实设备来测试我的应用程序。
最后这就是我在 android 上单击注册按钮时得到的结果:
succeed{"message","can not crate user"}
谢谢你帮助我
检查 JsonObjectRequest 来自 github 的源代码。这个构造函数
public JsonObjectRequest(
int method,
String url,
@Nullable JSONObject jsonRequest,
Listener<JSONObject> listener,
@Nullable ErrorListener errorListener)
接受一个JSONObject
。 jsonRequest
用作 post 数据。你要的数据post。来自方法文档:
@param jsonRequest A {@link JSONObject} to post with the request. Null indicates no * parameters will be posted along with request.
因此,如果您想 post 一些数据,请不要传递 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
不起作用,因为它未被调用。
好的,既然没人帮我,我自己试了一下,找到了答案, 问题是因为使用 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);
}
}
对我来说效果很好。 感谢我自己。