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

时间:2016-11-08 11:55:54

标签: java android android-studio try-catch android-volley

我正在开发一个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开发很新,所以非常感谢帮助:)

1 个答案:

答案 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

如果您在服务器端使用密钥附加令牌进行验证,也会更好。所以,没有人匿名打你的网址(如果泄露)。