我正在使用以下代码将图像从Android应用程序加载到Facebook。我已经安装了facebook sdk for android。但该应用程序没有做到预期的。我在logcat中收到“无效的应用程序ID”。我犯了什么错误?
Button mButton=(Button)findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Facebook mFacebook=new Facebook(yourAppID)
byte[] data = null;
Bitmap bi = BitmapFactory.decodeFile(imageLink);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bi.compress(Bitmap.CompressFormat.PNG, 100, baos);
data = baos.toByteArray();
Bundle params = new Bundle();
params.putString("method", "photos.upload");
params.putByteArray("picture", data);
AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);
mAsyncRunner.request(null, params, "POST",
new SampleUploadListener(), null);
}
});
public class SampleUploadListener extends BaseRequestListener {
@SuppressWarnings("unused")
public void onComplete(final String response, final Object state) {
try {
Log.d("Facebook-Example", "Response: " + response.toString());
JSONObject json = Util.parseJson(response);
String src = json.getString("src");
PublishImage.this.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),
"Successfully Uploaded", Toast.LENGTH_SHORT)
.show();
}
});
} catch (JSONException e) {
Log.w("Facebook-Example", "JSON Error in response");
} catch (FacebookError e) {
Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
}
}
}
public abstract class BaseRequestListener implements RequestListener {
public void onFacebookError(FacebookError e, final Object state) {
Log.e("Facebook", e.getMessage());
e.printStackTrace();
}
public void onFileNotFoundException(FileNotFoundException e,
final Object state) {
Log.e("Facebook", e.getMessage());
e.printStackTrace();
}
public void onIOException(IOException e, final Object state) {
Log.e("Facebook", e.getMessage());
e.printStackTrace();
}
public void onMalformedURLException(MalformedURLException e,
final Object state) {
Log.e("Facebook", e.getMessage());
e.printStackTrace();
}
}
logcat的
06-15 20:00:55.398: W/KeyCharacterMap(629): No keyboard for id 0
06-15 20:00:55.398: W/KeyCharacterMap(629): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-15 20:01:02.438: D/dalvikvm(629): GC_EXTERNAL_ALLOC freed 1214K, 59% free 2755K/6599K, external 1995K/2266K, paused 630ms
06-15 20:01:08.998: D/MediaPlayer(629): getMetadata
06-15 20:01:15.529: D/Facebook-Example(629): Response: {"error_code":101,"error_msg":"Invalid application ID.","request_args":[{"key":"method","value":"photos.upload"},{"key":"format","value":"json"}]}
06-15 20:01:15.529: W/Facebook-Example(629): Facebook Error: Invalid application ID.
编辑:这有效
class ButtonListener1 implements View.OnClickListener{
Facebook facebook=new Facebook(ID);
@Override
public void onClick(View v) {
facebook.authorize(Pic.this, new String[] { "publish_stream" },
new DialogListener() {
@Override
public void onFacebookError(FacebookError e) {
// TODO Auto-generated method stub
}
@Override
public void onError(DialogError dialogError) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Bundle values) {
postToWall(values.getString(Facebook.TOKEN));
}
private void postToWall(String accessToken) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] data = baos.toByteArray();
Bundle bundle = new Bundle();
bundle.putString(Facebook.TOKEN, accessToken);
bundle.putByteArray("facebookPictureData", data);
// The byte array is the data of a picture.
bundle.putByteArray("picture", getIntent().getExtras().getByteArray("data"));
try {
facebook.request("me/photos", bundle, "POST");
} catch (FileNotFoundException fileNotFoundException) {
// makeToast(fileNotFoundException.getMessage());
} catch (MalformedURLException malformedURLException) {
// makeToast(malformedURLException.getMessage());
} catch (IOException ioException) {
// makeToast(ioException.getMessage());
}
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
});
}
}
答案 0 :(得分:1)
更新: 这是facebook api参考网站上Facebook.java类的链接: http://developers.facebook.com/docs/reference/androidsdk/authentication/。向下滚动几行以查找授权方法。你确定你使用的是android sdk中的com.facebook.android.Facebook类,而不是你自己可以旋转的类吗?
Android应用程序的基本身份验证流程如下: 1.创建一个Facebook类的实例(你有)。 2.使用您需要的权限调用Facebook.authorize()。 3.在authorize方法的DialogListener回调中,您可以保存access_token和到期时间以供将来使用。 4.在您调用授权的活动中,覆盖“onActivityResult方法,如果使用Facebook的结果代码(Facebook.DEFAULT_AUTH_ACTIVITY_CODE)调用该方法,则使用收到的意图调用Facebook.authorizeCallback。 5.完成这4个步骤后,您可以使用Facebook.request()或AsyncFacebookRunner.request()自由发出图形API请求。在这些请求方法中,第一个参数是您想要的图形路径。因此,例如,如果您使用路径“我”调用请求方法,您将获得登录用户的配置文件信息。 END UPDATE -------
对于初学者,我认为您必须将图形路径作为此行代码中的第一个参数:
mAsyncRunner.request("*********7618/photos", params, "POST",
new SampleUploadListener(), null);
}
});
在我的代码中,它是专辑/照片。此外,您需要用户的权限才能上传到属于她的相册。为此,您需要使用Facebook.authorize()来检索访问令牌。
我不确定我是否理解为什么您收到与应用ID无效相关的错误,但是,据我所知,这是您在发布照片之前发布照片所需的基本步骤。< / p>
我相信有人会很快发布更好的答案,希望在此期间有所帮助。