2015-03-28 19 views
8

im lavorando su un progetto Android un Voglio mettere una caratteristica Facebook Login, ho aggiunto l'SDK Facebook correttamente, ma non ho potuto inizializzare LoginButtonImpossibile inizializzare LoginButton Facebook-SDK per 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:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
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:400) 
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:332) 
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:471) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

qui è la mia AppManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 

<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=".helloActivity" 
     android:label="@string/title_activity_hello" > 
    </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" /> 
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 
</application> 

Ho specificato l'id_app in string.xml. Grazie per l'aiuto

+0

Avete aggiunto una libreria (probabilmente un file jar) al progetto? –

+0

Sì, ho aggiunto correttamente Facebook PS: lavoro su Android Studio –

+0

Bene, l'errore suggerisce che la libreria non è effettivamente lì. –

risposta

18

Ciò è dovuto alla non inizializzazione di FacebookSdk prima del suo utilizzo. Basta aggiungere sotto la linea:

FacebookSdk.sdkInitialize(mContext);

in caso serie di LoginButton è:
1.Activity- prima setContentView(R.layout.activity_main)
2.Fragment- prima inflater.inflate(R.layout.fragment_main, container, false)

Inoltre, non dimenticare di ascoltare la richiamata in onActivityResult() in casi sopra elencati per aggiornare l'interfaccia utente di LoginButton.

+0

sì, Facebook deve succedere prima di ui init! – guleryuz

+0

Ricevo questo errore nell'anteprima xml (Funziona bene quando compilato). Qualsiasi indizio che cosa potrebbe causarlo – feresr

+1

@feresr Quale API di anteprima stai usando? Per impostazione predefinita mostra l'ultima, ma per l'API 22 il layout mostra errori: Prova a modificare l'API di anteprima su 21 –

4

Ho controllato l'ultimo SDK4.0.1, in cui com.facebook.login.widget.LoginButton è disponibile. Ma questo non è stato trovato in facebook-android-sdk-3.17.1, lì abbiamo solo com.facebook.widget.LoginButton disponibile. Facebook non ha comunicato agli sviluppatori o ai loro log delle modifiche che la classe LoginButton è stata spostata nella sottocartella.

Molto strano perché Facebook non si aggiorna correttamente .. Anche il doc for Android login è sbagliato !!

+8

La documentazione di Facebook fa schifo! – Skynet

+1

lo fa in atto – feresr

0

Aggiungere questo a voi Manifest.xml

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> 
<meta-data android:name="com.facebook.sdk.ApplicationName" android:value="@string/app_name" /> 
Problemi correlati