0

我的应用程序旨在允许用户拍照,然后将其上传到他们的 Facebook 墙上。以下代码与在与此完全相同的问题有关的其他 SO 问题上给出的许多其他工作代码示例非常相似,但仍然给了我空指针异常:

    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();
    }       
}

我只想让图像上传工作,然后再继续添加消息。有任何想法吗?

编辑:这是与 AsyncRunner(...) 行一起使用的 SampleUploadListener() :

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

    }
}

日志猫:

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)
4

2 回答 2

0

应该:

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);
}

您将路径作为 null 发送,这可能就是您得到空指针异常的原因。
另外根据文档,图像参数名称是source.


编辑

试试这个来检查 mAsyncRunner 是否为空:

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);
}

由于该行中引发了错误,因此这似乎是唯一可能的事情。

于 2012-06-21T18:28:28.953 回答
0

当您纠正了此处的任何错误时,您会不幸地发现,此时无法通过将实际图像字节直接上传到 facebook 来将图像发布到您的墙上。您可以将照片上传到他们的照片库,但不能上传到他们的墙上。要将照片发布到墙上,它必须已经在线,并且您需要提供指向它所在位置的链接以及其他数据。如果我弄错了,那么这是一个非常新的发展,因为几个月前我刚刚遇到了这一切,甚至向 Facebook 提交了一个错误,他们拒绝说“这不是错误,这是我们想要的事情”。

如果您可以将照片放在他们的画廊中(如果它是画廊中唯一的照片,它将看起来几乎与普通的墙贴一样),这就是这样做的方法: Android 将图片发布到 Facebook 墙上

于 2012-06-22T20:34:04.220 回答