[英]Facebook SDK Login in android
我試圖在我的應用程序中使用Facebook登錄,在我的片段活動中,我有4個標簽,並且我想在最后一個標簽中顯示和使用Facebook登錄,但是當我運行它時,它在每個標簽,當我單擊它時它不起作用,應用程序也在1分鍾內關閉
這是simpleFragement活動代碼:
package com.tekinarslan.material.sample;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import static com.tekinarslan.material.sample.R.layout.page;
public class SampleFragment extends Fragment {
private static final String ARG_POSITION = "position";
private WebView myWebView;
private String LOG_TAG = "AndroidWebViewActivity";
private int position;
public static SampleFragment newInstance(int position) {
SampleFragment f = new SampleFragment();
Bundle b = new Bundle();
b.putInt(ARG_POSITION, position);
f.setArguments(b);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
position = getArguments().getInt(ARG_POSITION);
View rootView = inflater.inflate(page, container, false);
ProgressBarCircular progressBarCircular = (ProgressBarCircular) rootView.findViewById(R.id.progress);
FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.fabButton);
WebView webView = (WebView) rootView.findViewById(R.id.webView);
fab.setDrawableIcon(getResources().getDrawable(R.drawable.plus));
switch (position) {
case 0:
webView.loadUrl("http://www.google.com");
break;
case 1:
webView.loadUrl("http://www.google.com");
break;
case 2:
webView.loadUrl("http://www.google.com");
break;
case 3:
LoginButton loginButton = (LoginButton) rootView.findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends");
// If using in a fragment
loginButton.setFragment(this);
// Other app specific specialization
// Callback registration
CallbackManager callbackManager = null;
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
break;
}
return rootView;
}
}
上
編輯1
這是我的托管活動
package com.tekinarslan.material.sample;
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.facebook.CallbackManager;
import com.facebook.FacebookSdk;
public class SampleActivity extends ActionBarActivity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle drawerToggle;
private ListView mDrawerList;
ViewPager pager;
private String titles[] = new String[]{"Sample Tab 1", "Sample Tab 2", "Sample Tab 3", "Sample Tab 4"};
private Toolbar toolbar;
SlidingTabLayout slidingTabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
FacebookSdk.sdkInitialize(getApplicationContext());
CallbackManager callbackManager = CallbackManager.Factory.create();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.navdrawer);
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_ab_drawer);
}
pager = (ViewPager) findViewById(R.id.viewpager);
slidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), titles));
slidingTabLayout.setViewPager(pager);
slidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return Color.WHITE;
}
});
drawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name);
mDrawerLayout.setDrawerListener(drawerToggle);
String[] values = new String[]{
"DEFAULT", "RED", "BLUE", "MATERIAL GREY"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch (position) {
case 0:
mDrawerList.setBackgroundColor(getResources().getColor(R.color.material_deep_teal_500));
toolbar.setBackgroundColor(getResources().getColor(R.color.material_deep_teal_500));
slidingTabLayout.setBackgroundColor(getResources().getColor(R.color.material_deep_teal_500));
mDrawerLayout.closeDrawer(Gravity.START);
break;
case 1:
mDrawerList.setBackgroundColor(getResources().getColor(R.color.red));
toolbar.setBackgroundColor(getResources().getColor(R.color.red));
slidingTabLayout.setBackgroundColor(getResources().getColor(R.color.red));
mDrawerLayout.closeDrawer(Gravity.START);
break;
case 2:
mDrawerList.setBackgroundColor(getResources().getColor(R.color.blue));
toolbar.setBackgroundColor(getResources().getColor(R.color.blue));
slidingTabLayout.setBackgroundColor(getResources().getColor(R.color.blue));
mDrawerLayout.closeDrawer(Gravity.START);
break;
case 3:
mDrawerList.setBackgroundColor(getResources().getColor(R.color.material_blue_grey_800));
toolbar.setBackgroundColor(getResources().getColor(R.color.material_blue_grey_800));
slidingTabLayout.setBackgroundColor(getResources().getColor(R.color.material_blue_grey_800));
mDrawerLayout.closeDrawer(Gravity.START);
break;
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case android.R.id.home:
mDrawerLayout.openDrawer(Gravity.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
}
編輯2
我加了這兩行
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
CallbackManager callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_sample);
但是,當我單擊Facebook按鈕或滑動選項卡時,該應用程序關閉
編輯3
現在這里是05-02 19:18:54.784 24164-24164/com.tekinarslan.material.sample E/AndroidRuntime﹕ FATAL EXCEPTION: main Log in attempt failed: LoginActivity could not be started at com.facebook.login.LoginManager.startLogin(LoginManager.java:382) at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250) at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:689) at com.facebook.FacebookButtonBase$1.onClick(FacebookButtonBase.java:310) at android.view.View.performClick(View.java:4475) at android.view.View$PerformClick.run(View.java:18786) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) at dalvik.system.NativeStart.main(Native Method
: 05-02 19:18:54.784 24164-24164/com.tekinarslan.material.sample E/AndroidRuntime﹕ FATAL EXCEPTION: main Log in attempt failed: LoginActivity could not be started at com.facebook.login.LoginManager.startLogin(LoginManager.java:382) at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250) at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:689) at com.facebook.FacebookButtonBase$1.onClick(FacebookButtonBase.java:310) at android.view.View.performClick(View.java:4475) at android.view.View$PerformClick.run(View.java:18786) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) at dalvik.system.NativeStart.main(Native Method
05-02 19:18:54.784 24164-24164/com.tekinarslan.material.sample E/AndroidRuntime﹕ FATAL EXCEPTION: main Log in attempt failed: LoginActivity could not be started at com.facebook.login.LoginManager.startLogin(LoginManager.java:382) at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250) at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:689) at com.facebook.FacebookButtonBase$1.onClick(FacebookButtonBase.java:310) at android.view.View.performClick(View.java:4475) at android.view.View$PerformClick.run(View.java:18786) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) at dalvik.system.NativeStart.main(Native Method
確保使用以下命令行在托管活動中初始化SDK:
FacebookSdk.sdkInitialize(getApplicationContext());
還要像這樣初始化callBackManager:
callbackManager = CallbackManager.Factory.create();
編輯1
在AndroidManifest
文件中注冊LoginActivity
。
注冊回調后,應通過重寫onActivityResult()
將登錄結果轉發到callbackManager
,如下所示:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.