Volley POST запрос android

Я не уверен, что мне следует использовать какой тип контента для POST в api, потому что я новичок в этом развивающемся мире.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        button = (Button)findViewById(R.id.reg_btn_sign_up);
        btnCancel = (Button)findViewById(R.id.reg_button_cancel);
        Email = (EditText)findViewById(R.id.reg_email);
        Name = (EditText)findViewById(R.id.reg_name);
        Pass = (EditText)findViewById(R.id.reg_pass);
        ConPass = (EditText)findViewById(R.id.reg_confirm_pass);


    button.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            email = Email.getText().toString();
            name = Name.getText().toString();
            password = Pass.getText().toString();
            conPass = ConPass.getText().toString();

            JSONObject jsonBody = new JSONObject();
            try {
                jsonBody.put("username", email);
                jsonBody.put("password", password);
                jsonBody.put("name", name);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            final String mRequestBody = jsonBody.toString();


            StringRequest stringRequest = new StringRequest(Request.Method.POST, reg_url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONArray jsonArray = new JSONArray(response);
                        JSONObject jsonObject = jsonArray.getJSONObject(0);
                        String status = jsonObject.getString("status");
                        String result = jsonObject.getString("result");
                        builder.setTitle("Server Response...");
                        builder.setMessage(result);
                    } catch (JSONException e){
                            e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            })

            {
                @Override
                public byte[] getBody() throws AuthFailureError {

                    try {
                        return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                        return null;
                    }

                }


                @Override
                public String getBodyContentType() {
                    return "application/json; charset=utf-8";
                }
            };

            MySingleton.getmInstance(RegisterActivity.this).addRequestQueue(stringRequest);

        }
    });

}

}

Это журнал, который я получаю в logcat:

W/System.err: org.json.JSONException: Value {"status":0,"result":"Access restricted"} of type org.json.JSONObject cannot be converted to JSONArray

Я делаю это правильно в POSTMAN, но мне не удалось получить желаемый результат в android.

API добавлен в команду.

Запрос: $ url / userRegister /? Token = $ token Метод: POST Запрос: params = {"user_id": "", "application_id": "device_id", "username": "", "ti‌ mestamp": "123456789 "‌," версия ":" app_vers‌ ion "," language ":" en или zh "," platform ":" ios or android "} data = {" username ":" [email protected] "," пароль ":" test "," name ":" test "} Ответ:

joey 11.06.2018 07:09

вы получаете эту ошибку, потому что пытаетесь преобразовать JSONObject в JSONArray

primo 11.06.2018 07:14

но это почти все, что я ссылаюсь на онлайн-источники. знак равно

joey 11.06.2018 07:16

не могли бы вы добавить ответ, который вы получаете

primo 11.06.2018 07:16

я не получаю никакого ответа. Я даже не знаю, что делаю. планирую переделать. какие-нибудь указания?

joey 11.06.2018 07:50

появляется больше ошибок, так как я последовал предоставленному ответу. обновится, как только я решу это

joey 11.06.2018 07:51

да отправлю путь за то же самое

primo 11.06.2018 07:55
1
7
4 678
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы получаете ответ JSONObject, а не JSONArray.

попробуйте следующий код в методе onResponse:

try {
                    JSONObject jsonObject = new JSONObject (response);
                    String status = jsonObject.getString("status");
                    String result = jsonObject.getString("result");
                    builder.setTitle("Server Response...");
                    builder.setMessage(result);
                } catch (JSONException e){
                        e.printStackTrace();
                }

Вы пытаетесь разобрать массив из своего ответа, но получаете JSONObject. Поэтому сначала измените эту строку, когда получите ответ

JSONObject jsonObject = new JSONObject(response);

и проверьте статус

if (jsonObject.getString("status").equalsIgnoreCase("0")){
   // show error message or whatever
}else if (jsonObject.getString("status").equalsIgnoreCase("1")){
   // then parse your array if response has it
}

Использовать это

JSONObject jsonObject = new JSONObject (response.toString());

Вместо

JSONArray jsonArray = new JSONArray(response);
JSONObject jsonObject = jsonArray.getJSONObject(0);
Ответ принят как подходящий

попробуй это

  public void login(final String user, final String pass) {
        Log.e("Constant.KEY_URL", String.valueOf(Constant.KEY_URL));
        StringRequest stringRequest = new StringRequest(Request.Method.POST, Constant.KEY_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                     //you will get your response in log
                        Log.e("response", response);

                        if (user.equals("") || pass.equals("")) {

                            Toast.makeText(getApplicationContext(), "username or password is empty", Toast.LENGTH_LONG).show();
                        } else if (!response.equals("empty")) {
                            Log.e("isempty", "yes");

                            try {
                                JSONArray array = new JSONArray(response);
                                for (int i = 0; i < array.length(); i++) {
                                    JSONArray array1 = array.getJSONObject(i).getJSONArray("data");
                                    for (int j = 0; j < array1.length(); j++) {


                                        startActivity(intent);
                                    }
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        } else {
                            Log.e("isempty", "else");
                            Toast.makeText(getApplicationContext(), "Username or password is incorrect", Toast.LENGTH_LONG).show();
                        }


                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "username or password is empty", Toast.LENGTH_LONG).show();
                        //  Toast.makeText(getApplicationContext(), "Invalid username or password", Toast.LENGTH_SHORT).show();
                        Log.e("Error", "msg==>" + error);
                    }
                }) {

            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> reqMap = new LinkedHashMap<>();
                reqMap.put("username", user);
                reqMap.put("password", pass);
                reqMap.put("method", "login");

                Log.e("request","login" + reqMap);

                return reqMap;
            }
        };
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 30, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        if (requestQueue == null) {
            requestQueue = Volley.newRequestQueue(getApplicationContext());
        }
        requestQueue.add(stringRequest);
        stringRequest.setTag("TAG");

    }

call this login method on your button click event

    btnlogin.setOnClickListener(new View.OnClickListener()

    {
        @Override
        public void onClick(View view) {
            user = editusername.getText().toString().trim();
            pass = editpassword.getText().toString().trim();

           login(user, pass);
        }

    });

Я предполагаю, что вы выполняете функцию регистрации, используя ответ на запрос залпа ... Относитесь к моему коду, который я использовал для входа в систему, вы можете изменить его в соответствии с вашими потребностями ... Надеюсь, это поможет

Другие вопросы по теме