2015-04-17 17 views
5

Ho integrato facebook sdk nel mio progetto di studio android ma l'applicazione si chiude non appena eseguo l'app. C'è un errore jsonexception nel designer dove ho usato com.facebook.login.widget.LoginButton, ma è solo un errore del designer.app forzate sull'avvio dell'attività di facebook

log degli errori:

> 04-17 19:29:35.996 24734-24734/com.example.bandhan.myapplication1 
> E/AndroidRuntime﹕ FATAL EXCEPTION: main 
>  Process: com.example.bandhan.myapplication1, PID: 24734 
>  java.lang.ExceptionInInitializerError 
>    at java.lang.reflect.Constructor.newInstance(Native Method) 
>    at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
>    at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
>    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) 
>    at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
>    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:435) 
>    at android.app.Activity.setContentView(Activity.java:2267) 
>    at com.example.bandhan.myapplication1.Share_Activity.onCreate(Share_Activity.java:15) 
>    at android.app.Activity.performCreate(Activity.java:6289) 
>    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
>    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
>    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) 
>    at android.app.ActivityThread.access$900(ActivityThread.java:177) 
>    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
>    at android.os.Handler.dispatchMessage(Handler.java:102) 
>    at android.os.Looper.loop(Looper.java:145) 
>    at android.app.ActivityThread.main(ActivityThread.java:5944) 
>    at java.lang.reflect.Method.invoke(Native Method) 
>    at java.lang.reflect.Method.invoke(Method.java:372) 
>    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) 
>    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 
>  Caused by: null 
>    at com.facebook.internal.Validate.sdkInitialized(Validate.java:99) 
>    at com.facebook.FacebookSdk.getCallbackRequestCodeOffset(FacebookSdk.java:735) 
>    at com.facebook.internal.CallbackManagerImpl$RequestCodeOffset.toRequestCode(CallbackManagerImpl.java:109) 
>    at com.facebook.login.widget.LoginButton.<clinit>(LoginButton.java:58) 
>             at java.lang.reflect.Constructor.newInstance(Native Method) 
>             at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
>             at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
>             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) 
>             at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
>             at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:435) 
>             at android.app.Activity.setContentView(Activity.java:2267) 
>             at com.example.bandhan.myapplication1.Share_Activity.onCreate(Share_Activity.java:15) 
>             at android.app.Activity.performCreate(Activity.java:6289) 
>             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
>             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
>             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) 
>             at android.app.ActivityThread.access$900(ActivityThread.java:177) 
>             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
>             at android.os.Handler.dispatchMessage(Handler.java:102) 
>             at android.os.Looper.loop(Looper.java:145) 
>             at android.app.ActivityThread.main(ActivityThread.java:5944) 
>             at java.lang.reflect.Method.invoke(Native Method) 
>             at java.lang.reflect.Method.invoke(Method.java:372) 
>             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) 
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 

ti prego, aiutami a risolvere il problema. Grazie.

risposta

10

Se si guarda alla linea 99 in Validate classe di Facebook, vedrete che è gettando un FacebookSdkNotInitializedException

È necessario chiamare FacebookSdk.sdkInitialize(Context) prima LoginButton è caricato (cioè la chiamata a setContentView())

Quindi, nei tuoi Activity 's onCreate metodo:

public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    setContentView(R.layout.my_layout); // Now you can set the layout with the LoginButton 
} 

ogni volta che si sta andando ad utilizzare i componenti di Facebook, è necessario assicurarsi che t l'SDK è inizializzato.

Assicurarsi inoltre di avere la chiave dei metadati per l'ID applicazione Facebook nel manifest, altrimenti si verificherà un altro problema quando si tenta di premere effettivamente lo LoginButton.

+0

Yup, avete capito bene. Ha funzionato come un fascino. Ma il problema è che non posso usare fb: dati fetch_user in xml e uilifecycle nel file java. Tutto il resto funziona perfettamente. Grazie. –

+0

Finché si effettua una chiamata a FacebookSdk.sdkInitialize prima di aggiungere l'XML che contiene i dati di Facebook, si dovrebbe essere buoni – Guardanis

+0

effettivamente fb: i dati fetch_user in xml e uilifecycle nel file java non vengono recuperati dalla libreria. A proposito sto usando l'ultima versione di fbsdk. Grazie –

0

Onestamente, questa soluzione non è infallibile.

Anche se ho chiamato il codice di inizializzazione prima di setContentView(), ottengo comunque segnalazioni di tale eccezione.

Ciò che si può fare è anche aggiungere una condizione if per assicurarsi che Facebook abbia terminato l'inizializzazione.

se (FacebookSdk.isInitialized()) // fare la vostra applicazione invitare qui