gpt4 book ai didi

java - Android Volley 请求未将 POST 数据发送到服务器/数据库

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:53 25 4
gpt4 key购买 nike

我正在开发一个Android应用程序,我一直在尝试合并社交媒体登录,我正在尝试添加通过社交媒体登录检索到的详细信息(姓名和电子邮件),并通过Volley请求将其添加到我们服务器上的用户数据库中。到目前为止,我已成功获取用户详细信息,并使用我创建的“ session ”类将其添加到共享首选项中,但是调用另一种方法将数据发送到服务器不起作用。

facebookLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
String fbID = null;
String fbName = null;
String fbEmail = null;
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
try {
fbID = object.getString("id");
fbName = object.getString("name");
fbEmail = object.getString("email");

session.setLogin(true);
session.setUserDetails(fbEmail,fbName);

} catch (JSONException e) {
e.printStackTrace();
} finally {
registerSocialUser(fbName, fbEmail);
}
}
});

正如您在我的 try/catch 中看到的,我通过“finally” block 向 registerSocialUser() 方法发出请求。这可以很好地调用以下方法,并且控制台会记录用户详细信息,但它永远不会添加到数据库中。

private void registerSocialUser (final String name, final String email) {
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest request = new StringRequest(Request.Method.POST, Config.REGISTER_SOCIAL_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("CREATION", "Social Media Account Added: " + name + " " + email);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("CREATION", "Create Error");
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("user",name); //name
params.put("email",email); //email
return params; //return the parameters

}
};
queue.add(request);
Log.d("CREATION", "SUCCESS");
}

logcat 返回:

Social Media Account Added: *My name* *My email*

Config.REGISTER_SOCIAL_URL 是一个 PHP 文件,它采用两个 POST 参数(姓名和电子邮件),并在检查数据库不存在后将它们添加到数据库中。我可以通过浏览器手动调用它,并使用完全相同的详细信息,它工作正常并添加到数据库中。

如果我的代码确实不好,请原谅,我对 Android 开发还很陌生,所以非常感谢您的帮助:)

最佳答案

发送参数时可以方便地使用POST请求方法。您很可能会错过某些方法。

    private void registerSocialUser (final String name, final String email) {
RequestQueue queue = Volley.newRequestQueue(this);
String stopArchiveUrl = Config.REGISTER_SOCIAL_URL;
StringRequest stringRequest = new StringRequest(Request.Method.POST, stopArchiveUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("CREATION", "Social Media Account Added: " + name + " " + email);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("ERROR", "Error adding Social Media Account");
}
}){
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("name",name); //name
params.put("email",email); //email
return params; //return the parameters
}
};
// Add the request to the RequestQueue.
queue.add(stringRequest);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();

}

我认为问题不在于你的代码。这是您在使用 POST 时传入参数的字符串,您正在使用

                   params.put("user",name); //name

应该是

                    params.put("name",name); //name

此外,如果您也使用 key 附加 token 以在服务器端进行验证,那就更好了。因此,没有人会匿名访问您的网址(如果以某种方式泄露)。

关于java - Android Volley 请求未将 POST 数据发送到服务器/数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40486314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com