将图片发布到Facebook墙上时出现空指针异常(android)

时间:2012-06-21 17:36:02

标签: android facebook nullpointerexception

我的应用程序旨在让用户拍照,然后将其上传到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

    }
}

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)

2 个答案:

答案 0 :(得分: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,这可能是您获得空指针异常的原因 另外,根据documentation,图片参数名称为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);
}

由于错误在该行中抛出,它似乎是唯一可能的事情。

答案 1 :(得分:0)

如果你已经纠正了这里的任何错误,你会发现目前无法通过将实际图像字节直接上传到Facebook来将图像发布到墙上。您可以将照片上传到他们的照片库,但不能上传到他们的墙上。要将照片发布到墙上,它必须已经在线,您需要提供一个链接到其中的位置以及其他数据。如果我错了,那么这是一个非常新的发展,因为我刚刚在几个月前遇到了这一切,甚至向Facebook提出了一个错误,他们拒绝说“这不是一个错误,这就是我们想要的东西”。 / p>

如果您可以将照片放入他们的画廊(如果它是画廊中唯一的照片,它看起来几乎就像一个普通的墙贴),这就是这样做的方法: Android post picture to Facebook wall