Volley没有通过使用StringRequest的POST请求将参数附加到我的URL

时间:2018-05-01 02:00:00

标签: android parameters http-post android-volley

我正在尝试使用volley为我的数据库添加分数。我已使用Postman使用POST请求测试了我的URL,我还手动将带有android应用程序中的参数的URL键入到POST请求中,这样就可以了。所以我假设我的问题是在我的Android代码中?或者我是否必须使用getParams手动构建url字符串?

我从后端得到的错误: 错误:ER_BAD_FIELD_ERROR:“字段列表”中的未知列“未定义”

这让我觉得我的参数在调用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();
    }
});

提前谢谢你,我很可能忽略了一些非常简单的东西,否则我只会修改我的StringRequest中的URL,因为这看起来有点傻,给定了getParams方法。

1 个答案:

答案 0 :(得分:0)

我希望这对你有用。

我认为你需要添加标题

覆盖此方法。

@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;
    }