Excepción del puntero nulo al publicar una imagen en la pared de Facebook (Android)

Mi aplicación está diseñada para permitir que los usuarios tomen una foto y luego la carguen en su muro de Facebook. El siguiente código es muy similar a muchos otros ejemplos de códigos de trabajo dados en otras preguntas de SO relacionadas con este mismo problema, pero aún así me da la excepción de puntero nulo:

    private void postOnWall()
    {
        final String response = "";
    try
    {
        Bundle params = new Bundle();
        params.putString("message", getMessage());
        params.putByteArray("picture", byteArray);
        mAsyncRunner.request(me/feed, params, "POST", new SampleUploadListener(),
        null);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }       
}

Simplemente me gustaría que la carga de la imagen funcione antes de poder continuar agregando el mensaje. ¿Algunas ideas?

EDITAR:  Aquí está el SampleUploadListener() que va con la línea AsyncRunner (...):

public class SampleUploadListener extends BaseRequestListener {
    public void onComplete(final String response, final Object state) {
        try {
           //process the response here: (executed in background thread)
            Log.d("Facebook-Example", "Response: " + response.toString());
            JSONObject json = Util.parseJson(response);
            final String src = json.getString("src");

           //then post the processed result back to the UI thread
           //if we do not do this, an runtime exception will be generated
           //e.g. "CalledFromWrongThreadException: Only the original
           //thread that created a view hierarchy can touch its views."

        } catch (JSONException e) {
            Log.w("Facebook-Example", "JSON Error in response");
        } catch (FacebookError e) {
            Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
        }
    }

    @Override
    public void onFacebookError(FacebookError e, Object state) {
       //TODO Auto-generated method stub

    }
}

LogCat:

06-22 13:23:45.136: W/System.err(20667): java.lang.NullPointerException
06-22 13:23:45.136: W/System.err(20667):    at     com.uncc.cci.TrashPickup.TrashPickupActivity.postwall(TrashPickupActivity.java:475)
06-22 13:23:45.136: W/System.err(20667):    at com.uncc.cci.TrashPickup.TrashPickupActivity$5$1.onClick(TrashPickupActivity.java:230)
06-22 13:23:45.140: W/System.err(20667):    at android.view.View.performClick(View.java:3511)
06-22 13:23:45.140: W/System.err(20667):    at android.view.View$PerformClick.run(View.java:14105)
06-22 13:23:45.140: W/System.err(20667):    at android.os.Handler.handleCallback(Handler.java:605)
06-22 13:23:45.140: W/System.err(20667):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-22 13:23:45.140: W/System.err(20667):    at android.os.Looper.loop(Looper.java:137)
06-22 13:23:45.140: W/System.err(20667):    at android.app.ActivityThread.main(ActivityThread.java:4424)
06-22 13:23:45.144: W/System.err(20667):    at java.lang.reflect.Method.invokeNative(Native Method)
06-22 13:23:45.144: W/System.err(20667):    at java.lang.reflect.Method.invoke(Method.java:511)
06-22 13:23:45.144: W/System.err(20667):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-22 13:23:45.144: W/System.err(20667):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-22 13:23:45.148: W/System.err(20667):    at dalvik.system.NativeStart.main(Native Method)
0
¿Tienes una foto para cargar? NullPointerException generalmente se lanza cuando se llama a un Object mientras es null cuando no debe ser null .
agregado el autor Jason L, fuente
Puedes subirme un byteArray/fotos, pero no puedes cargar un bytearay como una publicación en un muro. Para publicar una imagen en una pared, TIENE que proporcionar una URL válida para saber dónde reside esa imagen en Internet.
agregado el autor Genia S., fuente
@Yawus: 'byteArray' es una matriz de bytes de un mapa de bits que ya he manejado. Lo revisé para ver si era nulo y no lo era.
agregado el autor David B, fuente
@ MichałK: la línea mAsyncRunner.request (...) da la excepción de puntero nulo
agregado el autor David B, fuente
Como se sugirió en la respuesta a continuación, cambié el primer valor nulo a "me/photos", pero sigo recibiendo el mismo error. El mAsyncRunner es del tipo AsyncFacebookRunner.
agregado el autor David B, fuente
¿Puedes publicar tu LogCat?
agregado el autor gsb, fuente
¿Qué línea (consultar LogCat o publicarla)?
agregado el autor Michał K, fuente
Bueno, params , "POST" y new SampleUploadListener() seguramente no son nulos. Debe ser uno de estos dos null s que le proporciona NPE. Simplemente verifique qué debería ir allí (no sé qué tipo de objeto es su mAsyncRunner ) y publíquelo en lugar de null .
agregado el autor Michał K, fuente

2 Respuestas

Cuando hayas corregido el error que tienes aquí, desafortunadamente descubrirás que no es posible en este momento publicar una imagen en tu muro cargando los bytes reales de la imagen directamente en Facebook. Puedes subir una foto a su galería de fotos, pero no a su muro. Para publicar una foto en la pared, ya debe residir en línea y deberá proporcionar un vínculo a su ubicación junto con los demás datos. Si me equivoco, este es un desarrollo muy nuevo ya que acabo de encontrar todo esto hace unos meses e incluso archivé un error en Facebook que rechazaron diciendo que "no es un error, es cómo pretendíamos que fuera".

If you're ok with putting the photo in their gallery (if it's the only photo IN the gallery it will look almost exactly like a regular wall post) this is the way to do it: Android post picture to Facebook wall

0
agregado
Había llegado a esa conclusión después de leer más detenidamente a través de su documentación, pero esperaba que hubieran publicado algo más apropiado mientras tanto. Lamentablemente, subir una foto a su galería no es un buen plan para la aplicación, así que encontraré otra solución alternativa. ¡Gracias por tu respuesta confirmando mis miedos!
agregado el autor David B, fuente

Debiera ser:

private void postOnWall() {
    Bundle params = new Bundle();            
    params.putString("message", "New picture");
    params.putByteArray("source", byteArray);
    mAsyncRunner.request("me/photos", params, "POST", new SampleUploadListener(), null);
}

You sent the path as null and that's probably why you got the null pointer exception.
Also according to the documentation the image parameter name is source.


Editar

Intente esto para verificar si mAsyncRunner es nulo:

private void postOnWall() {
    Bundle params = new Bundle();            
    params.putString("message", "New picture");
    params.putByteArray("source", byteArray);
    Log.d("Facebook-Example", mAsyncRunner == null ? "mAsyncRunner is null" : "mAsyncRunner not null");
    mAsyncRunner.request("me/photos", params, "POST", new SampleUploadListener(), null);
}

Dado que el error se arroja en esa línea, parece ser lo único posible.

0
agregado
Cambié mi código para reflejar su consejo, pero desafortunadamente sigo recibiendo la misma excepción de puntero nulo en la misma línea. ¿Hay algo que deba incluir en mi SampleUploadListener() que pueda causar esto?
agregado el autor David B, fuente
He actualizado mi pregunta para reflejar los cambios, uploadListener y logcat
agregado el autor David B, fuente
Sí, es del tipo AsyncFacebookRunner (de com_facebook_android). Acabo de revisar la documentación para esto, y encontré esto: "Realice una solicitud a la API Graph de Facebook con el método HTTP y los parámetros de cadena. Tenga en cuenta que esta función auxiliar aún no admite los parámetros de datos binarios (por ejemplo, imágenes). " He visto muchas otras publicaciones aquí en SO que han usado este mismo método (con el argumento HTTP "POST") que dicen tener éxito al publicar una imagen de matriz de bytes, así que esto me resulta confuso.
agregado el autor David B, fuente
¡Gracias por tu ayuda!
agregado el autor David B, fuente
¿Puedes publicar tu código modificado y el código de SampleUploadListener?
agregado el autor Nitzan Tomer, fuente
¿Estás seguro de que se ha construido el mAsyncRunner ?
agregado el autor Nitzan Tomer, fuente
Esto se refiere al método request del objeto Facebook normal, no a AsyncFacebookRunner . Edité mi respuesta.
agregado el autor Nitzan Tomer, fuente