вопросы запроса форматирования Android Volley POST

голоса
0

У меня есть Android приложение, которое после того, как нажата кнопка, посылает HTTPRequest к .php файл на моем сервере. Внутри HTTPRequest хранить POST переменные, которые обрабатываются на стороне сервера.

Это мой код:

public void sendRequest(Context context, String url, final HashMap<String, String> hm) {
    RequestQueue queue = Volley.newRequestQueue(context);

    Log.w(url, url);

    // Request a string response from the provided URL.
    StringRequest sr = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.w(Response, response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.w(Sending progress, Failure);
        }
    }) {
        @Override
        public byte[] getBody() throws AuthFailureError {
            return new JSONObject(hm).toString().getBytes();
        }

        @Override
        protected Map<String, String> getParams()
        {
            return hm;
        }
    };

    // Add the request to the RequestQueue.
    queue.add(sr);
}

Обратите внимание, что переменная HashMap используется передаются в самом метод, потому что я хочу использовать этот метод динамически в различных других классах. Данные получает там хорошо, но с некоторыми вопиющими проблемами:

1) По какой - то причине мой JSON строка передается как «ключ» , а не «ценности». Я на самом деле задал вопрос об этом только сейчас - кто - то был достаточно любезен , чтобы ответить мне - вы можете увидеть вопрос на данные POST в PHP форматирования вопроса . Есть ли способ решить эту проблему?

2) Жутко достаточно, когда мои данные достигли PHP, все «» и «». символы были заменены на «_». Я подозреваю, что другие чувствительные символы будут такими же, как «/» и . Я понимаю, если бы это было переменная GET, но это должно быть по-прежнему происходит в переменных POST? Или это связано с (1)?

---РЕДАКТИРОВАТЬ---

HashMap , что я передаю в метод sendRequestдинамически генерируется, но в целом это просто:

HashMap<String, String> hm = new HashMap<String, String>();
hm.put(personName, ((EditText) findViewById(R.id.text1).getText().toString().trim());
hm.put(personNumber, ((EditText) findViewById(R.id.text2).getText().toString().trim());

sendRequest(getApplicationContext(), http://foo.com/bar.php, hm);

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

Задан 20/10/2018 в 05:01
источник пользователем
На других языках...                            


2 ответов

голоса
0

Во-первых, инициализировать RequestQueue в OnCreate.

RequestQueue queue = Volley.newRequestQueue(this);

Затем подготовить вас переменные

Map<String, String> params= new HashMap<>(); 
params.put("key1", "arg1");
params.put("key2", "arg2");
params.put("key3", "arg3"); 

И с этим запросом POST ничтожным серверного кода.

private void sendRequest(final String QUERY_URL, final Map<String,String> mapParams) 
    {

        StringRequest postRequest = new StringRequest(Request.Method.POST, QUERY_URL ,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) { 
                        //Log.d(TAG, response);  
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) { 
                        //Log.d(TAG , error.toString());  
                    }
                }
        ) {
            @Override
            protected Map<String, String> getParams() {

                return mapParams;
            }
        };

        queue.add(postRequest);
    }

А также

sendRequest("http://foo.com/bar.php", params)
Ответил 20/10/2018 в 08:05
источник пользователем

голоса
0
String  _Url= "put your url here";
//rest request
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest sr = new StringRequest(Request.Method.POST, _Url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        if(response !=null)
        {
   //you can check the response here by puting log here
        }





    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.i("error", "error: "+error);



    }
}) {
    @Override
    protected Map<String, String> getParams() {



        Map<String, String> params = new HashMap<String, String>();

        params.put("key1", value in string);
        params.put("key2", value in string);

        params.put("method", "mehtod name here");


        return params;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();
        params.put("Content-Type", "application/x-www-form-urlencoded");
        return params;
    }
};
            queue.add(sr);
Ответил 20/10/2018 в 06:17
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more