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