Facebook Android SDK v4.0.0 ShareDialog NullPointerException issue

Según estas instrucciones https://developers.facebook.com/docs/sharing/android He implementado el Facebook ShareDialog para que aparezca en mi aplicación, pero está causando el siguiente error.

03-27 16: 12: 53.150: E / AndroidRuntime (10275): FATAL EXCEPTION: principal 03-27 16: 12: 53.150: E / AndroidRuntime (10275): Proceso: au.com.elegantmedia.emotit, PID: 10275 03 -27 16: 12: 53.150: E / AndroidRuntime (10275): java.lang.NullPointerException: Intenta invocar el método virtual 'int java.lang.Object.hashCode ()' en una referencia de objeto null 03-27 16:12: 53.150: E / AndroidRuntime (10275): en java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:746) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): at com.facebook.internal.Utility .getDialogFeatureConfig (Utility.java:859) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): at com.facebook.internal.DialogPresenter.getVersionSpecForFeature (DialogPresenter.java:248) 03-27 16: 12: 53.150 : E / AndroidRuntime (10275): en com.facebook.internal.DialogPresenter.getProtocolVersionForNativeDialog (DialogPresenter.java:234) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en com.facebook.internal.DialogPresenter. CanPresentNativeDialogWithFeature (DialogPresenter.java:75) 03- 27 16: 12: 53.150: E / AndroidRuntime (10275): en com.facebook.share.widget.ShareDialog.canShowNative (ShareDialog.java:133) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): at Com.facebook.share.widget.ShareDialog.access $ 0 (ShareDialog.java:130) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en com.facebook.share.widget.ShareDialog $ NativeHandler.canShow ShareDialog.java:241) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en com.facebook.share.widget.ShareDialog $ NativeHandler.canShow (ShareDialog.java:1) 03-27 16:12: 53.150: E / AndroidRuntime (10275): en com.facebook.internal.FacebookDialogBase.createAppCallForMode (FacebookDialogBase.java:184) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): at com.facebook.internal.FacebookDialogBase .showImpl (FacebookDialogBase.java:147) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en com.facebook.internal.FacebookDialogBase.show (FacebookDialogBase.java:142) 03-27 16: 12: 53.150 : E / AndroidRuntime (10275): en au.com.elegantmedia.emotit.activities.MainActivity.onTellAFriendClick (MainActivity.java:299) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en au.com.elegantmedia.emotit.activities.MainActivity.onItemClick (MainActivity.java:194) 03-27 16:12 : 53.150: E / AndroidRuntime (10275): en android.widget.AdapterView.performItemClick (AdapterView.java:300) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en android.widget.AbsListView.performItemClick 03: 16: 12: 53.150: E / AndroidRuntime (10275): en android.widget.AbsListView $ PerformClick.run (AbsListView.java:3044) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en android.widget.AbsListView $ 3.run (AbsListView.java:3833) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en android.os.Handler.handleCallback (Handler.java: 739) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en android.os.Handler.dispatchMessage (Handler.java:95) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): at Android.os.Looper.loop (Looper.java:135) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en android.app.ActivityThread.main (ActivityThread.java:5221) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en java.lang.reflect.Method.invoke (método nativo) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en java.lang .reflect.Method.invoke (Method.java:372) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:899) 03-27 16: 12: 53.150: E / AndroidRuntime (10275): en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694)

En línea,

03-27 16: 12: 53.150: E / AndroidRuntime (10275): en com.facebook.internal.Utility.getDialogFeatureConfig (Utility.java:859)

Es la siguiente pieza de código,

FetchedAppSettings settings = fetchedAppSettings.get(applicationId); 

Ambos fetchedAppSettings{} y applicationIdnull parecen no haber sido inicializados.

El único lugar del ID de aplicación es, en el archivo de manifiesto.

 <provider android:authorities="com.facebook.app.FacebookContentProviderXXX" android:name="com.facebook.FacebookContentProvider" android:exported="true"/> 

XXX siendo el applicationId y lo he puesto allí correctamente. Todo lo demás también se hace como,

 FacebookSdk.sdkInitialize(getApplicationContext()); callBackManager = CallbackManager.Factory.create(); shareDialog = new ShareDialog(this); shareDialog.registerCallback(callBackManager, new FacebookCallback<Sharer.Result>() { @Override public void onSuccess(Result result) { ELog.d(LOG_TAG, "success"); } @Override public void onError(FacebookException error) { ELog.d(LOG_TAG, "error"); } @Override public void onCancel() { ELog.d(LOG_TAG, "cancel"); } }); 

En onCreate() y llamando,

 if (ShareDialog.canShow(ShareLinkContent.class)) { ShareLinkContent linkContent = new ShareLinkContent.Builder() .setContentTitle("Hello Facebook") .setContentDescription( "The 'Hello Facebook' sample showcases simple Facebook integration") .setContentUrl( Uri.parse("http://developers.facebook.com/android")) .setImageUrl(Uri.parse("https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-xfa1/t39.2178-6/11057086_1577191859234204_214246289_n.png")) .build(); shareDialog.show(linkContent); } 

Cuando el usuario hace clic para compartir contenido. ¿Hay algo que he perdido? ¿O estoy corriendo en algún tipo de un error en el nuevo SDK que hace que el NullPointerException ?

3 Solutions collect form web for “Facebook Android SDK v4.0.0 ShareDialog NullPointerException issue”

También es necesario agregar el ID de la aplicación de la siguiente manera:

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

(Espero que alguien en FB lea esto)

Además del consejo (correcto) dado por Gokhan Caglar, también tenga en cuenta esto: No escriba el número de ID de la aplicación directamente en AndroidManifest.xml! Para que FB funcione, app-id también debe definirse correctamente de acuerdo con la mejor práctica en el archivo strings.xml

Debido a que el app-id también se utiliza bajo la etiqueta de proveedor, pero allí directamente como el número, hice el acceso directo de escribir el número de app-id directamente en la etiqueta de meta-datos también. Enorme error, hace 2 días.

Como parece, FB hará uso de app-id obtenido de AndroidManifest.xml y directamente basado en las definiciones de strings.xml. Ambos deben estar allí. App-id debe definirse en strings.xml. Esto resolvió el problema.

Para el equipo de desarrollo de FB, un par de sugerencias que ahorrarán tiempo a la gente:

  • Suprima este uso excesivo de app-id, o explique en el tutorial que esta es la única manera. (Es más estricto que el propio Android)

  • Hacer un mejor sistema de informes de errores como superposición cuando las definiciones de la aplicación no son apropiadas. Una excepción nula como esta profunda dentro de FB pronto se convierte en su tiempo ladrón del día. En este caso, un informe de error del tipo: "Error: app-id no definido en strings.xml" habría sido satisfactorio.

  • En cuanto al tutorial, contiene una trampa también, por lo que lo menciono: Si ejecuta el tutorial aquí: https://developers.facebook.com/quickstarts/?platform=android , después de haber insertado hash clave para el desarrollo, Algo que haría fácilmente si las cosas no funcionan, entonces tenga en cuenta que este tutorial eliminará (o más bien reemplazará) información vital en la definición de la aplicación sin informarle sobre ella. Puesto que usted quizás ya ha definido el keyhash, no lo rellene una vez más en esta guía de inicio rápido. Por lo tanto, más tarde descubre que el keyhash se ha ido y pregunto por qué.

No escriba la clave de facebook dentro de la meta

Escribir en una cadena y hacer referencia a ella en la meta en el manifiesto

al igual que

 <string name="id_facebook">id_facebook</string> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/id_facebook" /> 

espero que esto ayude 🙂

  • Facebook Publicar en tu nombre no funciona en android facebook sdk 3.0.2
  • Android facebook sdk no llama a la devolución de llamada después de iniciar sesión
  • La verificación instantánea de Facebook no está verificando el número de móvil a través de la aplicación de Facebook
  • Android: Facebook 3.0 Publicar en la pared de los amigos usando la respuesta de solicitud de FQL (A partir de Apr23,2013)
  • Openssl no se reconoce como un comando interno o externo
  • ¿Podemos cambiar la imagen del enlace (que está publicado por la aplicación android) en facebook
  • Uso del API de logro de Facebook en Android
  • ¿Cómo obtener el token de acceso actual en Facebook Android SDK V4?
  • Android: Cómo obtener la imagen de usuario de facebook mediante access_token
  • Facebook anuncios nativos en reciclar view android
  • ¿Cómo obtener el token de acceso de usuario de facebook en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.