我正在尝试使用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方法。
答案 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;
}