2015-06-14 82 views
3

花了几天的时间试图找出这一点,我无法想出任何有效的工作。使用我的代码,它显示我接受并登录的权限表单,但它没有进入onSuccess,onError或onCancel。任何时候我点击按钮,它都不会做任何事情。 LogCat上没有错误。我不知道我哪里错了。Android FacebookSDK V4.20使用登录管理器登录和注销

fb = (Button) findViewById(R.id.fb_button); 
    fb.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,permissionNeeds); 
      callbackManager = CallbackManager.Factory.create(); 

      LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        Log.d("kkkkkk","kkllkl"); 
       } 

       @Override 
       public void onCancel() { 
        Log.d("kkkkkk","kkllkl2"); 
       } 

       @Override 
       public void onError(FacebookException error) { 
        Log.d("kkkkkk","kkllkl4"); 
       } 
      }); 


     } 
    }); 

FacebookSdk.sdkInitialize(this.getApplicationContext());super.onCreate(savedInstanceState);

+0

了Facebook SDK V4我们可以注销使用这个链接http://stackoverflow.com/questions/18529874/android-clear-facebook-access-token/32324398#32324398 –

回答

3

我终于想通了之后被初始化。我改变了代码一点从最初的代码如下:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
    LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.d("kkkkkk","kkllkl"); 
     } 

     @Override 
     public void onCancel() { 
      Log.d("kkkkkk","kkllkl2"); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      Log.d("kkkkkk","kkllkl4"); 
     } 
    }); 

,然后在点击监听按钮的,我不得不拨打电话进行登录。

fb.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,permissionNeeds); 

     } 
    }); 

也不要忘记添加onActivityResult。我也犯了这个错误。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
1

完整的代码如下。

public class MainActivity extends ActionBarActivity { 

    CallbackManager callbackManager; 
    Button but, but2; 
    AccessTokenTracker accessTokenTracker; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     but = (Button) findViewById(R.id.button); 

     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 




      LoginManager.getInstance().registerCallback(callbackManager, 
        new FacebookCallback<LoginResult>() { 
         @Override 
         public void onSuccess(LoginResult loginResult) { 
          // App code 
         } 

         @Override 
         public void onCancel() { 
          // App code 
          // savedInstanceState 
         } 

         @Override 
         public void onError(FacebookException exception) { 
          // App code 
         } 
        }); 
      LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 

    // } 
      accessTokenTracker = new AccessTokenTracker() { 
       @Override 
       protected void onCurrentAccessTokenChanged(
         AccessToken oldAccessToken, 
         AccessToken currentAccessToken) { 

       } 
      }; 

      but.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        getUserData(AccessToken.getCurrentAccessToken()); 
        Log.d("Access Token: ", AccessToken.getCurrentAccessToken().toString()); 
       } 
      }); 
     } 


    public void getUserData(AccessToken accessToken){ 
     GraphRequest request = GraphRequest.newMeRequest(
       accessToken, 
       new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(
          JSONObject object, 
          GraphResponse response) { 
         //JSONParser parser=new JSONParser(); 
         // Data data = new Gson().fromJson(json, Data.class); 
         long ID = 0; 

       try { 
        String name = response.getRawResponse(); 
        Toast.makeText(MainActivity.this, "response is: "+object.toString(), Toast.LENGTH_LONG).show(); 
       } 
       catch (Exception e){ 
        Toast.makeText(MainActivity.this, "error is: "+e.toString(), Toast.LENGTH_LONG).show(); 
       } 

        } 
       }); 
     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id,name,link"); 
     request.setParameters(parameters); 
     request.executeAsync(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     accessTokenTracker.stopTracking(); 
    } 
} 
+0

耶。这也是一个不错的方法。 – uchman21