2015-11-02 38 views
2

当前创建了一个Facebook登录按钮,我现在试图重定向到一个新的成功登录活动。为此我当然使用onSucces()函数。Facebook SDK - 登录后没有任何反应

但是,当我点击我的应用程序登录它加载,但没有任何反应。它停留在登录页面。

我LoginActivity代码:

package com.example.frederik.testpleasework; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.TextView; 

import com.facebook.AccessToken; 
import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.Profile; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 

public class LoginActivity extends Activity { 

    LoginButton login; 
    TextView info; 
    CallbackManager callbackManager; 

    //Creating and initializing the feature(Code from Facebook install guide) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); //Calls for the facebook feature 
     callbackManager = CallbackManager.Factory.create(); //Initializing callback, checking login result 
     setContentView(R.layout.content_main); 
     info = (TextView) findViewById(R.id.info); 
     login = (LoginButton) findViewById(R.id.login_button); 

     login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Intent i = new Intent(LoginActivity.this, LandingActivity.class); 
       startActivity(i); 
      } 

      @Override 
      public void onCancel() { 

      } 

      @Override 
      public void onError(FacebookException e) { 

      } 
     }); 
    } 

} 

而且我的下一个活动(LandingActivity)代码:

package com.example.frederik.testpleasework; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 

public class LandingActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.content_landing); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

} 

我假设的错误是在这些类的一个地方,但如果你需要更多来自其他代码部分的信息,请随时申请。

编辑,androidmanifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.frederik.testpleasework" > 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" > 
     </activity> 
     <activity 
      android:name="com.facebook.FacebookActivity" 
      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 
     <activity android:name=".LoginActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <meta-data 
      android:name="com.facebook.sdk.ApplicationId" 
      android:value="@string/fbid" /> 

     <uses-permission android:name="android.permission.CAMERA" /> 
//Requests permission to use the camera 
     <uses-feature android:name="android.hardware.camera" /> 
//A device NEEDS to have a camera to install the app 
     <activity 
      android:name=".LandingActivity" 
      android:label="@string/title_activity_landing" 
      android:theme="@style/AppTheme.NoActionBar" > 
     </activity> 
    </application> 

</manifest> 
+0

你的'AndroidManifest.xml'看起来像什么? –

+0

@MukulGoel添加了它=) – KrownScripter

+0

一旦你点击“登录Facebook”,Facebook按钮变成“登出”? – DroidAks

回答

0
mButtonLogin.registerCallback(callbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        handlePendingAction(); 
        GraphRequest request = GraphRequest.newMeRequest(
          loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback() { 


           @Override 
           public void onCompleted(JSONObject object,GraphResponse response) { 
            Log.v("LoginActivity", response.toString()); 
            try { 
             Intent i = new Intent(LoginActivity.this, LandingActivity.class); 
             startActivity(i); 

            } catch (JSONException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 
           }         
          }); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 

       } 

       @Override 
       public void onError(FacebookException exception) { 

       } 


      }); 

尝试在您登录活动添加该代码。

+0

尝试添加代码。获取无法解析sybol“mButtonLogin”,我应该将其更改为“登录”,就像我在上面的代码中定义的那样?也无法解析“handlePendingAction()”方法。并且在结尾Exception'org.json.JSONException'永远不会在相应的try块中抛出。 – KrownScripter

+0

是的!将其更改为登录。 – DroidAks

+0

虽然 – KrownScripter

1

从官方的Facebook文档。 使用方法doFBLogin登录取基本配置文件

// Write only required permissions 
    private String[] PERMISSION = new String[]{"user_photos", "email", 
      "user_about_me", "public_profile", "user_about_me", "user_friends", 
      "user_likes", "user_hometown", 
      "user_education_history", "user_work_history", "user_birthday"}; 

    private CallbackManager callbackmanager; 
    private String strFirstname; 
    private String strLastname; 
    private String strEmail; 
    private String strProfilePhoto; 
    private String strGender; 

    private void doFBLogin() { 
      callbackmanager = CallbackManager.Factory.create(); 
      // Set permissions 
      LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(PERMISSION)); 
      LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        GraphRequest request = GraphRequest.newMeRequest(
          loginResult.getAccessToken(), 
          new GraphRequest.GraphJSONObjectCallback() { 
           @Override 
           public void onCompleted(
             JSONObject json, 
             GraphResponse response) { 
            if (response.getError() != null) { 
             new ShowToast(SplashScreen.this, getResources().getString(R.string.failed_login)); 
            } else { 
             try { 
              strFirstname = json.getString("first_name") + " " + json.getString("last_name"); 
              strLastname = json.getString("last_name"); 
              strEmail = json.getString("email"); 
              strProfilePhoto = json.getJSONObject("picture").getJSONObject("data").getString("url"); 
              strGender = json.getString("gender"); 

             } catch (JSONException e) { 
             } 
            } 

           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id,name,email,gender,birthday,first_name,last_name,picture.type(large)"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 
       } 

       @Override 
       public void onError(FacebookException error) { 
        new ShowToast(SplashScreen.this, getResources().getString(R.string.failed_login)); 
       } 
      }); 


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

而在你的manifest做到以下几点。

<!-- For detect network connections --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

       <activity 
        android:name="com.facebook.FacebookActivity" 
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 

       <meta-data 
        android:name="com.facebook.sdk.ApplicationId" 
        android:value="@string/app_id" /> 
       <!-- Provider --> 
       <provider 
        android:name="com.facebook.FacebookContentProvider" 
        android:authorities="com.facebook.app.FacebookContentProvider1460656834264602" 
        android:exported="true" 
        android:writePermission="true" /> 
1

第一步,初始化的Facebook SDK:

FacebookSdk.sdkInitialize(this.getApplicationContext()); 

第二步,建立回拨经理:

CallbackManager callbackManager = CallbackManager.Factory.create(); 

第三步,添加读取权限:

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 

下一步,注册呼叫bac k:

LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...}); 

以上所有代码都可以使用onCreate方法。最后,你必须添加onActivityResult回拨:

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

试试这个代码,我希望它可以帮助你。你可以参考this