Facebook Android SDK - 可以读取个人资料,但不能将照片发布到墙上
Facebook Android SDK - can read profile, but not publish photo to wall
我正在使用这个库将 facebook 集成到我的应用程序中:https://github.com/sromku/android-simple-facebook。它在访问个人资料、好友列表等时工作正常。但是,当我尝试在墙上发布照片时,我使用常规 SDK,但它不起作用。在这种情况下,我不使用该库,因为它不支持将照片发布到 wall/pages/groups.
我在请求发布权限后通过了会话并触发此请求:
public void uploadToFaceWall() {
Session session = mFaceSession;
if (session != null){
String fbPhotoAddress = null;
Request.Callback uploadPhotoRequestCallback = new Request.Callback() {
@Override
public void onCompleted(Response response) {
if (response.getError() != null) {
Log.d(TAG, "error: "+response.toString()):
}
Object graphResponse = response.getGraphObject().getProperty("id");
if (graphResponse == null || !(graphResponse instanceof String) ||
TextUtils.isEmpty((String) graphResponse)) {
Log.d(TAG, "failed photo upload/no response");
} else {
finish();
}
}
};
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeFile(myFacePost.getImages().getString(0), options);
} catch (JSONException e) {
e.printStackTrace();
}
Bundle parameters = new Bundle();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
parameters.putByteArray("picture", byteArray);
parameters.putString("message", "Check out my picture");
Request req = new Request(session, "me/photos", parameters, HttpMethod.POST, uploadPhotoRequestCallback);
req.executeAndWait();
}
}
但是,这不起作用,并且响应包含错误:
{Response: responseCode: 200, graphObject: null, error: {HttpStatus: -1, errorCode: -1, errorType: null, errorMessage: java.lang.NullPointerException}, isFromCache:false}
mFaceSession
是我在用户接受新发布权限后的会话。
调试时我看到会话已打开。
知道为什么这不起作用吗?
我已经使用 SDK 附带的 HelloFacebook 示例测试了您的代码,此处替换为:https://github.com/facebook/facebook-android-sdk/blob/master/samples/HelloFacebookSample/src/com/facebook/samples/hellofacebook/HelloFacebookSampleActivity.java#L351
而且效果很好。您面临的可能问题是最后一行 req.executeAndWait();
如果您在主线程上执行此操作,您将遇到异常,因此将其更新为示例中的 req.executeAsync()
它应该可以工作.
还可以看到您获得了成功的 200 代码,您可以通过转到该用户时间线查看它是否有效。 NullPointerException 可能来自这一行:Object graphResponse = response.getGraphObject().getProperty("id");
.
我正在使用这个库将 facebook 集成到我的应用程序中:https://github.com/sromku/android-simple-facebook。它在访问个人资料、好友列表等时工作正常。但是,当我尝试在墙上发布照片时,我使用常规 SDK,但它不起作用。在这种情况下,我不使用该库,因为它不支持将照片发布到 wall/pages/groups.
我在请求发布权限后通过了会话并触发此请求:
public void uploadToFaceWall() {
Session session = mFaceSession;
if (session != null){
String fbPhotoAddress = null;
Request.Callback uploadPhotoRequestCallback = new Request.Callback() {
@Override
public void onCompleted(Response response) {
if (response.getError() != null) {
Log.d(TAG, "error: "+response.toString()):
}
Object graphResponse = response.getGraphObject().getProperty("id");
if (graphResponse == null || !(graphResponse instanceof String) ||
TextUtils.isEmpty((String) graphResponse)) {
Log.d(TAG, "failed photo upload/no response");
} else {
finish();
}
}
};
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeFile(myFacePost.getImages().getString(0), options);
} catch (JSONException e) {
e.printStackTrace();
}
Bundle parameters = new Bundle();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
parameters.putByteArray("picture", byteArray);
parameters.putString("message", "Check out my picture");
Request req = new Request(session, "me/photos", parameters, HttpMethod.POST, uploadPhotoRequestCallback);
req.executeAndWait();
}
}
但是,这不起作用,并且响应包含错误:
{Response: responseCode: 200, graphObject: null, error: {HttpStatus: -1, errorCode: -1, errorType: null, errorMessage: java.lang.NullPointerException}, isFromCache:false}
mFaceSession
是我在用户接受新发布权限后的会话。
调试时我看到会话已打开。
知道为什么这不起作用吗?
我已经使用 SDK 附带的 HelloFacebook 示例测试了您的代码,此处替换为:https://github.com/facebook/facebook-android-sdk/blob/master/samples/HelloFacebookSample/src/com/facebook/samples/hellofacebook/HelloFacebookSampleActivity.java#L351
而且效果很好。您面临的可能问题是最后一行 req.executeAndWait();
如果您在主线程上执行此操作,您将遇到异常,因此将其更新为示例中的 req.executeAsync()
它应该可以工作.
还可以看到您获得了成功的 200 代码,您可以通过转到该用户时间线查看它是否有效。 NullPointerException 可能来自这一行:Object graphResponse = response.getGraphObject().getProperty("id");
.