Библиотека залпа не может разместить данные на сервере - PullRequest
0 голосов
/ 31 августа 2018

Я занимаюсь разработкой приложения для Android для WordPress сайта, который имеет логин и регистрация.

Я использую библиотеку залпа, она очень хорошо подключается к серверу,

НО МОЯ ПРОБЛЕМА заключается в том, что когда я публикую параметры в 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));

после этих кодов вот мои коды андроид студии: это метод, который я написал внутри 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 голосов
/ 01 сентября 2018

ок, так как никто мне не помог, я попробовал и нашел ответ, Проблема была из-за использования 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);
    }

}

и это сработало для меня очень хорошо. благодаря себе.

0 голосов
/ 31 августа 2018

Проверка JsonObjectRequest Исходный код из github. Этот конструктор

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

принять JSONObject. jsonRequest используется в качестве почтовых данных. Данные, которые вы хотите опубликовать. Из методической документации:

@ param jsonRequest A {@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, потому что он не вызывается.

...