La aplicación de Android se bloquea después de compartir usando los diálogos de Facebook

Estoy tratando de integrar Facebook SDK en un proyecto de Android. Estoy publicando un mensaje en el muro en el cuadro de diálogo de Facebook, cuando presiono "Compartir", el mensaje se publica correctamente en mi muro de Facebook. ¡Pero mi juego sigue fallando!

Lo llamo desde mi clase principal que extiende Actividad. Para mostrar los cuadros de diálogo de la interfaz de usuario de Facebook, uso runOnUiThread. (AsyncTask no funciona en mi código).

public static int fbShareScores( final String sBody ) 
{
try 
{   
  oThis.runOnUiThread ( 
    new Runnable ( ) 
    { 
      @Override
      public void run ( ) 
      { 
        Bundle params = new Bundle();
        params.putString("caption", "Caption");
        params.putString("description", sBody);
    params.putString("picture", URL_TO_PNG);
        params.putString("name", "Name");
        oThis.mFacebook.dialog(oThis, "feed", params, null);
      } 
    } 
  );
}
catch ( Exception e ) 
{ 
  Log.d(Globals.sApplicationName, "share scores: Dialog: " + e.getMessage());
}

return 1;
}

Aquí están mis errores de logcat:

D/Facebook-WebView(957): URL de carga de vista web: https://m.facebook.com/dialog/feed W/AudioFlinger(32): escritura bloqueada durante 80 ms, 275 escrituras retrasadas, subproceso 0xff88 D/dalvikvm(957): GC_CONCURRENT liberado 539K, 15 % libre 7403K/8647K, pausado 3ms+47ms D/webviewglue(957): vista nativeDestroy : 0x925250 D/Facebook-WebView(957): URL de redirección: fbconnect://success?post_id=570020602_418386674846932 D/AndroidRuntime(957): Apagando la VM W/dalvikvm(957): threadid=1: hilo saliendo con una excepción no detectada ( group=0x40014760) E/AndroidRuntime(957): EXCEPCIÓN FATAL: principal E/AndroidRuntime(957): java.lang.NullPointerException E/AndroidRuntime(957): en com.facebook.android.FbDialog$FbWebViewClient.shouldOverrideUrlLoading(FbDialog.java :143) E/AndroidRuntime(957): en android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:219) E/AndroidRuntime(957): en android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:319) E/AndroidRuntime (957): en android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(957): en android.os.Looper.loop(Looper.java:126) E/AndroidRuntime (957): en android.app.ActivityThread.main(ActivityThread.java:3997) E/AndroidRuntime(957): en java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(957): en java. lang.reflect.Method.invoke(Method.java:491) E/AndroidRuntime(957): en com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) E/AndroidRuntime(957): en com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) E/AndroidRuntime(957): en dalvik.system.NativeStart.main(Native Method) W/ActivityManager(67): Forzar la finalización de la actividad com.companyname .nombreClasePrincipal/.NombreClasePrincipal

preguntado el 03 de mayo de 12 a las 08:05

¿Estás ejecutándolo en un subproceso diferente al de la interfaz de usuario? -

No estoy seguro si entiendo. Soy nuevo en el desarrollo de Android. La actividad de la clase principal de mi juego está en un hilo principal, que llama a runOnUiThread, que ejecuta el diálogo de Facebook. FbDialog.java es el SDK de Facebook, no sé si FB está usando otro hilo, lo hago referencia desde mi juego. -

¿Estás usando la clase regular de Facebook o la AsyncFacebookRunner? Si no está usando este último, entonces no hay razón para que use runOnUiThread ya que estas en el mismo hilo. Esto no tiene nada que ver con Android, es más una cosa de Java y aún más fundamental: trabajar con hilos. -

Estoy usando la clase de Facebook. Cuando no uso runOnUiThread, aparece el error relacionado con no estar en el subproceso de la interfaz de usuario. Me las arreglé para evitar este error, al pasar un DialogListener, lo tenía configurado en nulo. -

Parece que estás haciendo algo extraño. ¿Puedes editar tu pregunta y agregar un código más relevante? -

1 Respuestas

El error desaparece cuando cambio la línea en el código anterior a:

oThis.mFacebook.dialog(oThis, "feed", params, new PostStatusDialogListener());

Luego agregue un nuevo DialogListener:

public class PostStatusDialogListener implements DialogListener 
{
  @Override
  public void onComplete(Bundle values) {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::onComplete");
  }

  @Override
  public void onFacebookError(FacebookError error) {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::onFacebookError: " + error.getMessage());
  }

  @Override
  public void onError(DialogError error) {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::DialogError: " + error.getMessage());
  }

  @Override
  public void onCancel() {
    Log.d(Globals.sApplicationName, "PostStatusDialogListener::onCancel");
  }
}

contestado el 04 de mayo de 12 a las 03:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.