2

我面臨一個奇怪的問題與Facebook登錄按鈕的Facebook的Android SDK 4 4.我已經按照指南轉換我以前的代碼(我用舊的Facebook的SDK) ,但android studio無法正確呈現按鈕。 這是我的登錄按鈕代碼:無法呈現在Android工作室的Facebook登錄按鈕

<com.facebook.login.widget.LoginButton 
    xmlns:fb="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/fb_button" 
    style="@style/FacebookLoginButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/my_button" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="-14dp" 
    android:textSize="34sp" 
    fb:login_text="@string/login_with_facebook" 
    fb:logout_text="Logout" /> 

wbhere Facebook登錄按鈕樣式是

<style name="FacebookLoginButton"> 
    <item name="android:background">@drawable/button_facebook</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textSize">21sp</item> 
    <item name="android:gravity">center</item> 

現在,當我嘗試看看在Android工作室預覽,我這個錯誤:

java.lang.NoClassDefFoundError: Could not initialize class com.facebook.login.widget.LoginButton 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:413) 
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105) 
at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:176) 
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207) 
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:132) 
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:806) 
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:782) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:385) 
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:410) 
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:321) 
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350) 
at com.android.tools.idea.rendering.RenderService$5.compute(RenderService.java:708) 
at com.android.tools.idea.rendering.RenderService$5.compute(RenderService.java:697) 
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932) 
at com.android.tools.idea.rendering.RenderService.createRenderSession(RenderService.java:697) 
at com.android.tools.idea.rendering.RenderService.render(RenderService.java:816) 
at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480) 
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) 
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) 
at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) 
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) 
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) 
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) 
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) 
at com.intellij.util.Alarm$Request$1.run(Alarm.java:327) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

有什麼不對?

回答

0

您需要重寫片段中的onCreate,onCreateView和onViewCreated。

事情是這樣的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    loginButton = (LoginButton) view.findViewById(R.id.login_button); 
    loginButton.setReadPermissions("email", "user_likes", "user_friends"); 
    loginButton.setFragment(this); 
    setFacebookLoginText(loginButton); 
    // 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(); 
     } 
    }); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_facebook_login, container, false); 
    return view; 
} 


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

這不是一個應用程序問題(它工作正常,按鈕顯示)。這只是一個問題,在Android的工作室佈局 – giozh 2015-04-02 07:46:37

+3

預覽相同的「問題」有所有其他用戶。按鈕不在預覽中呈現。但我不認爲這是「問題」,因爲它工作正常。也許,在新版本中,Facebook將解決這個問題。 – VadymVL 2015-04-02 11:51:14

+0

我的按鈕沒有理由停止在應用程序中呈現!無論我做什麼,我都會看到默認按鈕。我甚至複製粘貼從舊版本的原始類和佈局,重新啓動我的手機,筆記本電腦,清理,重建項目。沒什麼幫助。有沒有人遇到過這個? – erdomester 2015-10-19 05:44:09