因此,我试图使用片段实现登录按钮。facebook网站上的文档有点令人困惑。我的应用程序甚至在一开始就崩溃了。在构建中没有错误。这是我的密码。如果有人能帮我,我会很感激的!
MainActivity.java:
public class MainActivity extends FragmentActivity {
private CallbackManager callbackManager;
// private Fragment mainfrag=new Fragment();
private AccessTokenTracker accessTokenTracker;
private boolean isResumed = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
}
};
setContentView(R.layout.activity_main);
}
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:orientation="vertical"
android:weightSum="1">
<ImageView
android:layout_width="300dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:src="@drawable/banner" />
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.moviere.MainFragment"
android:id="@+id/fragment"
android:layout_gravity="center_horizontal"
android:layout_weight="0.17" />
fragment_main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.moviere.MainFragment">
<TextView android:layout_width="match_parent" android:layout_height="match_parent"
android:text="@string/hello_blank_fragment"
android:gravity="center_horizontal" />
<com.facebook.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|top"
android:layout_marginTop="30dp" />
和MainFragment.java:
public class MainFragment extends Fragment {
private CallbackManager callbackManager;
private LoginButton loginButton;
public MainFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends");
// If using in a fragment
loginButton.setFragment(this);
// Other app specific specialization
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getActivity(),"Success",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(getActivity(),"fail",Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(getActivity(),"error", Toast.LENGTH_SHORT).show();
}
});
return view;
}
编辑: Android Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.moviere" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
</application>
发布于 2015-03-31 11:03:47
您已经添加了集成Facebook所需的所有内容,但是代码的定位存在一些问题。
您正在片段中使用LoginButton
,但使用Activity
实例初始化FacebookSdk
。您不需要在活动中做任何事情,只需像这样更新您的片段的代码:
...
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(this);
callbackManager = CallbackManager.Factory.create();
View view = inflater.inflate(R.layout.fragment_main, container, false);
loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends");
loginButton.setFragment(this);
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
...
}
}
@Override
... onActivityResult(...) {
super.onActivityResult(...);
callbackManager.onActivityResult(...);
}
另外,从登录回调的ProfileTracker
/AccessTokenTracker
方法开始,在onCancel()
和onDestroy()
中停止。
https://stackoverflow.com/questions/29336255
复制相似问题