2016-11-08 4 views
1

私はソーシャルメディアのログインを取り入れようとしているアンドロイドアプリを開発中です。ソーシャルメディアのログイン(名前&のメール)で取得した詳細を追加しようとしています。 Volleyリクエストを介してサーバー上のユーザーのデータベースに追加します。 これまでは、ユーザーの詳細を正常に取得し、作成した 'セッション'クラスを使用して共有環境設定に追加しましたが、サーバーにデータを送信する別のメソッドを呼び出すことはできません。あなたは私のtry/catchで見ることができるようにAndroid Volleyサーバー/データベースに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); 
          } 
         } 
        }); 

私は「最終的には」ブロックを経由して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は2つのPOSTパラメータ(名前とメールアドレスを)取り、それが既に存在していない確認した後、データベースに追加し、PHPファイルです。私は正確に同じ詳細で私のブラウザを介してこれを手動で呼び出すことができ、うまく動作し、データベースに追加します。私のコードのいずれかが本当に悪い習慣である場合

は、すみません、私は助けを本当に感謝:)

答えて

0

あなたは簡単にPOSTリクエストメソッドを使用できるパラメータを送信する一方でAndroidの開発にはかなり新しいです。あなたにはいくつかの方法が欠けている可能性が十分にあります。

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("name",name); //name 

またそれが良いだろうしなければならない

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

を使用していますサーバー側でも検証されます。だから誰も匿名であなたのURLを(何らかの形で漏れた場合)ヒットしなかった。

+0

私の男!それは、ポスト値が一致しなかった、ああ、私は今、このような愚か者のような気がするのです。 – Joe

+0

最後に、tryブロック内であなたの関数を呼び出すことができます。 catchブロックによって処理される返されません。サーバーからすべてが取得された場合は、あなたのURLを呼び出すことができますが、欠落しているものがあれば例外を表示するだけです。最終的に –

+0

うわー、良い......! –

関連する問題