Exceção de ponteiro nulo ao postar uma foto no mural do Facebook (android)

Meu aplicativo é destinado a permitir que os usuários tirem uma foto e enviem-na para o mural do Facebook. O código a seguir é muito semelhante a muitos outros exemplos de código de trabalho fornecidos em outras questões do SO relacionadas a esse mesmo problema, mas ainda me dá a exceção de ponteiro 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();
    }       
}

Eu simplesmente gostaria de fazer o upload da imagem funcionar antes de poder adicionar a mensagem a ela. Alguma ideia?

EDITAR:  Aqui está o SampleUploadListener() que acompanha a linha 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
adicionado editado
Visualizações: 1
Você tem uma foto para ser carregada? NullPointerException é normalmente lançado quando um Object é chamado enquanto é null quando não deve ser null .
adicionado o autor Jason L, fonte
você pode fazer upload de um byteArray para mim/fotos, mas você não pode fazer o upload de um bytearray como um post para uma parede. Para postar uma imagem em uma parede, você precisa fornecer um URL válido para o local em que a imagem já reside na Internet.
adicionado o autor Genia S., fonte
@ Yawus: 'byteArray' é uma matriz de bytes de um bitmap que já manipulei. Eu verifiquei para ver se era nulo e não era.
adicionado o autor David B, fonte
@ MichałK: a linha mAsyncRunner.request (...) fornece a exceção do ponteiro nulo
adicionado o autor David B, fonte
Como foi sugerido na resposta abaixo, mudei o primeiro nulo para "me/photos", mas ainda estou recebendo o mesmo erro. O mAsyncRunner é do tipo AsyncFacebookRunner.
adicionado o autor David B, fonte
você pode postar seu LogCat?
adicionado o autor gsb, fonte
Qual linha (consulte o LogCat ou publique-o)?
adicionado o autor Michał K, fonte
Bem, params , "POST" e new SampleUploadListener() certamente não são nulos. Deve ser um desses dois null s que lhe dá NPE. Apenas verifique o que deve estar lá (não sei que tipo de objeto é seu mAsyncRunner ) e poste-o em vez de null .
adicionado o autor Michał K, fonte

2 Respostas

Quando você tiver corrigido qualquer bug que tenha aqui, você infelizmente descobrirá que não é possível, neste momento, postar uma imagem na sua parede fazendo o upload dos bytes da imagem diretamente para o facebook. Você pode enviar uma foto para a galeria de fotos deles, mas não para a parede deles. Para postar uma foto na parede, ela já deve estar on-line e você precisará fornecer um link para onde ela mora junto com os outros dados. Se eu estou enganado, então este é um desenvolvimento muito novo, como eu encontrei tudo isso há alguns meses e até mesmo entrou com um bug no Facebook que eles rejeitaram dizendo que "não é um bug, é como pretendíamos que as coisas sejam".

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
adicionado
Cheguei a essa conclusão depois de ler com mais cuidado a documentação deles, mas esperava que eles tivessem liberado algo mais apropriado nesse meio tempo. Infelizmente, o upload de uma foto para a galeria não é um bom plano para o aplicativo. Por isso, vou encontrar outra alternativa. Obrigado pela sua resposta confirmando meus medos!
adicionado o autor David B, fonte

Deveria estar:

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

Tente isto para verificar se o mAsyncRunner é 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);
}

Como o erro é lançado nessa linha, parece que é a única coisa possível.

0
adicionado
Eu mudei meu código para refletir seu conselho, mas infelizmente eu ainda estou recebendo a mesma exceção de ponteiro nulo na mesma linha. Existe alguma coisa que eu deveria estar incluindo no meu SampleUploadListener() que pode causar isso?
adicionado o autor David B, fonte
Atualizei minha pergunta para refletir as alterações, uploadListener e logcat
adicionado o autor David B, fonte
Sim, é do tipo AsyncFacebookRunner (de com_facebook_android). Acabei de verificar a documentação para isso e descobri o seguinte: "Faça uma solicitação à API de gráficos do Facebook com o método HTTP e os parâmetros de string fornecidos. Observe que os parâmetros de dados binários (por exemplo, imagens) ainda não são suportados por essa função auxiliar. " Eu vi muitos outros posts aqui no SO que usaram esse mesmo método (com o argumento HTTP "POST") que reivindicam sucesso em postar uma imagem de matriz de bytes, então isso é confuso para mim.
adicionado o autor David B, fonte
Obrigado pela ajuda!
adicionado o autor David B, fonte
Você pode postar seu código modificado e o código para SampleUploadListener?
adicionado o autor Nitzan Tomer, fonte
Você tem certeza que o mAsyncRunner foi construído?
adicionado o autor Nitzan Tomer, fonte
Isso se refere ao método request do objeto regular Facebook , e não AsyncFacebookRunner . Eu editei minha resposta.
adicionado o autor Nitzan Tomer, fonte