Volley Library无法将数据发布到服务器

时间:2018-08-31 19:38:25

标签: java php android api android-volley

我正在为具有登录名和密码的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"}

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

从github检查JsonObjectRequest源代码。构造函数

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

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

  

@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);
    }

}

对我来说很好。 多亏我自己。