首页 > 解决方案 > 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"}

谢谢你帮助我

标签: javaphpandroidapiandroid-volley

解决方案


检查来自 github 的JsonObjectRequest源代码。这个构造函数

    public JsonObjectRequest(
        int method,
        String url,
        @Nullable JSONObject jsonRequest,
        Listener<JSONObject> listener,
        @Nullable ErrorListener errorListener)

接受一个JSONObjectjsonRequest用作发布数据。您要发布的数据。从方法文档:

@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因为它没有被调用。


推荐阅读