Это правильный способ отправить запрос POST с телом JSON, используя Volley? - PullRequest
0 голосов
/ 13 февраля 2019

Запрос Post, который я отправляю, никак не отвечает.

У меня есть этот API входа, Запрос Post, в котором параметры задаются в теле в виде строки, а параметр заголовка - {"content-type":" application / json "}.Я протестировал API с помощью Post man, и это сработало. Почтовый запрос

Ниже приведен мой код для отправки запроса:

private void SignIn () {

    String url = WebConfiguration.getServer() + WebServiceParams.LOG_IN;
    Map<String, String> params = WebServiceParams.getLogInParams(mEmail, mPassword);
    JSONObject jsonParams = new JSONObject( params);
    // json request
    DataLoader.loadJsonDataPostWithProgress3(this, url,
    new SignInRequestHandler(), mProgress, jsonParams , Request.Priority.HIGH, TAG);
    }

//

public static void loadJsonDataPostWithProgress3(final Activity activity, String url, final OnJsonDataLoadedListener listener,
                                            final ProgressDialog progress, final JSONObject params,
                                            final Request.Priority priority, String tag) {
Utils.showProgress(progress);

    JsonObjectRequest jsonObjReq = new JsonObjectRequest(url, params,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    JSONObject jsonResponse = null;
                    try{
                        jsonResponse = (JSONObject)response;
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                    Utils.dismissProgress(progress);
                    if (listener != null) {
                        LogInResponse webServiceLoginResponse = JsonParser.json2WebServiceLogInResponse(jsonResponse);
                        if (webServiceLoginResponse != null) {
                            if (webServiceLoginResponse.getMsg() == "error") {
                                listener.onJsonDataLoadedWithError(MyApplication.ERROR_CODE, webServiceLoginResponse.getDetails());
                            } else if (webServiceLoginResponse.getMsg() == "ok") {
                                listener.onJsonDataLoadedSuccessfully(webServiceLoginResponse.getUserData());
                            }
                        } else {
                            Utils.showDialog(activity, R.string.error_parse);
                        }
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Utils.dismissProgress(progress);
            if (listener != null) {
                int errorId = R.string.error_connection;
                if (error instanceof TimeoutError || error instanceof NoConnectionError) {
                    errorId = R.string.error_connection;
                } else if (error instanceof AuthFailureError) {
                    errorId = R.string.error_connection;
                } else if (error instanceof ServerError) {
                    errorId = R.string.error_server;
                } else if (error instanceof NetworkError) {
                    errorId = R.string.error_connection;
                } else if (error instanceof ParseError) {
                    errorId = R.string.error_parse;
                }
                listener.onJsonDataLoadingFailure(errorId);
            }
        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/json");
            return params;
        }
    };
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
        TIMEOUT_MS,
        NUM_RETRIES,
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
VolleySingleton.getInstance().addToRequestQueue(jsonObjReq, tag);

}

//// закрытый класс SignInRequestHandler реализует DataLoader.OnJsonDataLoadedListener {

@Override
public void onJsonDataLoadedSuccessfully(JSONObject userData) {
    onLoginSucceeded(JsonParser.json2UserData(userData));
}

@Override
public void onJsonDataLoadedWithError(int errorCode, String errorMessage) {
    Utils.showDialog(SignInActivity.this, errorMessage);
}

@Override
public void onJsonDataLoadingFailure(int errorId) {
    Utils.showDialog(SignInActivity.this, errorId);
}

}

Когда я отлаживаю код, он передается вФункция «SignIn ()», но когда она запрашивает «DataLoader.loadJsonDataPostWithProgress3», она просто передает ее как не существует, она не переходит к обработчику ни обработки ошибок, ни ошибок.На стороне приложения я нажимаю на кнопку log show show progress, затем остановка прогресса без каких-либо сообщений.

...