我正在开发一个Android应用程序,我一直在尝试合并社交媒体登录,我正在尝试添加通过社交媒体登录(名称和电子邮件)检索的详细信息,并将其添加到我们的用户数据库服务器通过Volley请求。 到目前为止,我已成功获取用户详细信息,并使用'会话'将其添加到共享首选项中。我创建的类,但调用另一种方法将数据发送到服务器不起作用。
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中看到的那样,我通过&#39; finally&#39;向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开发很新,所以非常感谢帮助:)
答案 0 :(得分:0)
发送参数时,您可以轻松使用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
如果您在服务器端使用密钥附加令牌进行验证,也会更好。所以,没有人匿名打你的网址(如果泄露)。