Залп не привязывает параметры к моему URL через запрос POST с StringRequest - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь использовать залп, чтобы добавить счет в мою базу данных. Я проверил свой URL с помощью запроса POST с помощью Postman, я также вручную набрал URL с параметрами в приложении для Android на запрос POST, и это работает. поэтому я предполагаю, что моя проблема в моем коде Android? Или я должен использовать getParams, чтобы вручную построить строку URL?

ошибка, которую я получаю от моего бэкэнда: Ошибка: ER_BAD_FIELD_ERROR: неизвестный столбец «undefined» в «списке полей»

, что заставляет меня думать, что мои параметры не инициализируются до вызова StringRequest.

public void submitHighScore(){
    StringRequest postRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>()
            {
                @Override
                public void onResponse(String response) {
                    // response
                    Toast.makeText(context, response , Toast.LENGTH_SHORT).show();
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // error
                    Toast.makeText(context, "Error: unable to submit Score " + error , Toast.LENGTH_SHORT).show();
                }
            }
    ){@Override
        protected Map<String, String> getParams() throws com.android.volley.AuthFailureError
        {
            Map<String, String>  params = new HashMap<String, String>();
            params.put("playerName", "Android test");
            params.put("playerScore", "3000");

            return params;
        }
    };

    HighScoreSingleton.getInstance(context).addToRequestQueue(postRequest);

Для тех, кто может или не может поверить мне в мой код на моей стороне сервера.

app.post('/api/highScore', function(req,res){
    var con = mysql.createConnection({
        host: "xxxx",
        user: "xxxx",
        password: "xxxx",
        database: "xxxx"
    });
    if(req.query!=null){ //
        console.log(typeof req.query.playerName);
    con.query(`INSERT INTO xxxx (playerScore, playerName) VALUES
            (${req.query.playerScore}, "${req.query.playerName}" )`, // async, runs callback aka function
         function(err,rows){
            if(err) throw err;
            res.setHeader('Content-Type', 'text/plain');
            res.send('Updated High Score');
        });

    con.end();
    }
});

Заранее спасибо, вполне возможно, что я пропускаю что-то очень простое, иначе я просто изменю свой URL в своем StringRequest, поскольку это кажется немного глупым, учитывая метод getParams.

1 Ответ

0 голосов
/ 01 мая 2018

Надеюсь, это сработает для вас.

Я думаю, вам нужно добавить заголовок

Переопределить этот метод.

@Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String,String> params =  super.getHeaders();
        if(params==null)params = new HashMap<>();
        params.put("Content-Type","text/plain");
        return params;
    }
...