2016-11-08 113 views
1

我发展,我一直在试图将社交媒体登录Android应用程序,我想补充通过社交媒体登录检索到的详细信息(姓名&电子邮件)并通过Volley请求将其添加到我们服务器上的用户数据库。 到目前为止,我已经设法成功地获得用户的详细信息,并使用我创建的“会话”类将它添加到共享偏好,但是调用另一个方法将数据发送到服务器无法正常工作。Android的凌空请求不发送POST数据到服务器/数据库

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看到我做通过“终于”块到registerSocialUser()方法的请求。这样可以很好地调用以下方法,并且Console日志是用户的详细信息,但它永远不会添加到数据库中。

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

虽然发送参数,你可以很容易地使用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 

此外,它会更好,如果您将使用密钥对令牌服务器端的验证也是如此。所以,没有人以匿名方式打你的网址(如果泄露了)。

+0

我的男人!这是它,后值不匹配,现在我觉得这样的傻瓜哈哈 – Joe

+0

而不是最后,你可以在try块内调用你的函数,因为如果任何异常发生将发生如果没有用户名,电子邮件是没有返回,这将由catch块处理。如果从服务器获取所有内容,则可以调用您的url,但如果缺少任何内容,则只显示一个异常。在终于 –

+0

哇,好......! –

相关问题