Android/Facebook:在墙上发布消息
我想通过安卓应用程序在我自己的墙上发布一条消息。我使用loginToFacebook()方法登录。单击一个按钮,如果用户已登录,我希望发布一条消息。我不太熟悉facebookapi,所以我查阅了facebook开发者文档和互联网上的其他网站,提出了下面的代码。然而,我的墙上没有贴任何信息。显然,我错过了一些东西,但我不知道是什么,因为我的日志没有错误Android/Facebook:在墙上发布消息,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我想通过安卓应用程序在我自己的墙上发布一条消息。我使用loginToFacebook()方法登录。单击一个按钮,如果用户已登录,我希望发布一条消息。我不太熟悉facebookapi,所以我查阅了facebook开发者文档和互联网上的其他网站,提出了下面的代码。然而,我的墙上没有贴任何信息。显然,我错过了一些东西,但我不知道是什么,因为我的日志没有错误 public class ShareActivity extends Activity implements OnClickListener{
public class ShareActivity extends Activity implements OnClickListener{
Facebook facebook = new Facebook("477110419013909");
AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
String FILENAME = "AndroidSSO_data";
SharedPreferences mPrefs;
public void onClick(View arg0) {
loginToFacebook();
if (facebook.isSessionValid()) {
Bundle bundle = new Bundle();
bundle.putString("message","Hey Facebook!");
try {
String strRet = facebook.request("/me/feed",bundle,"POST");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
Log.e("Facebook", "Error: " + e.getMessage());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
Log.e("Facebook", "Error: " + e.getMessage());
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("Facebook", "Error: " + e.getMessage());
}
}
public void loginToFacebook() {
mPrefs = getPreferences(MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (access_token != null) {
facebook.setAccessToken(access_token);
}
if (expires != 0) {
facebook.setAccessExpires(expires);
}
if (!facebook.isSessionValid()) {
facebook.authorize(this,
new String[] { "email", "publish_stream" },
new DialogListener() {
@Override
public void onCancel() {
// Function to handle cancel event
}
@Override
public void onComplete(Bundle values) {
// Function to handle complete event
// Edit Preferences and update facebook acess_token
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token",
facebook.getAccessToken());
editor.putLong("access_expires",
facebook.getAccessExpires());
editor.commit();
}
@Override
public void onError(DialogError error) {
// Function to handle error
}
@Override
public void onFacebookError(FacebookError fberror) {
// Function to handle Facebook errors
}
});
}
}
}
我试着去做
if (facebook.isSessionValid()) {
Bundle bundle = new Bundle();
bundle.putString("message","Hey Facebook!");
facebook.dialog((Activity) this, "feed", bundle,
new DialogListener() {
public void onComplete(Bundle values) {
}
public void onFacebookError(FacebookError error) {}
public void onError(DialogError e) {}
public void onCancel() {}
});
}
也不起作用我已将此活动类用于发布图像:
public class PostStatusFBActivity extends Activity {
private static String[] PERMISSIONS =
new String[] {"photo_upload","publish_stream"};
Bundle parems;
//String status;
private AsyncFacebookRunner mAsyncRunner;
public final static String FB_APP_ID = "xxxxxxxx";
private Facebook fb;
private Handler mHandler;
//private ProgressDialog mProgressDialog;
//private static String app_secret = "51a4b033e6cdbddf5761101d3eb09881";
/**
* @see android.app.Activity#onCreate(Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new Handler();
Intent intent=getIntent();
parems=intent.getBundleExtra("params");
fb= new Facebook(PostStatusFBActivity.FB_APP_ID);
SessionStore.restore(fb, this);
if (fb.isSessionValid())
post_status();
else
fb.authorize(this, PERMISSIONS,new AppLoginListener());
}
private class AppLoginListener implements DialogListener {
public AppLoginListener() {
}
public void onCancel() {
Toast.makeText(getApplicationContext(), "Please accept to login", Toast.LENGTH_LONG).show();
finish();
}
public void onComplete(Bundle values) {
/**
* We request the user's info so we can cache it locally and
* use it to render the new html snippets
* when the user updates her status or comments on a post.
*/
mAsyncRunner=new AsyncFacebookRunner(fb);
post_status();
}
public void onError(DialogError e) {
Log.e("BTS", "dialog error: " , e);
}
public void onFacebookError(FacebookError e) {
Log.e("BTS ", "facebook error: " , e);
Toast.makeText(getApplicationContext(), "Facebook error", Toast.LENGTH_LONG).show();
finish();
}
}
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
//Facebook fb = Session.wakeupForAuthCallback();
fb.authorizeCallback(requestCode, resultCode, data);
}
public void post_status() {
Log.e("BTS ____ ", " Post satus called ");
mAsyncRunner.request("me/photos", parems,"POST",new mRequestListener(),null);
}
public class mRequestListener implements RequestListener{
@Override
public void onMalformedURLException(MalformedURLException e, Object state) {
Log.d("BTS", "******************* FACEBOOK::onMalformedURLException *******************");
e.printStackTrace();
finish();
}
@Override
public void onIOException(IOException e, Object state) {
Log.d("BTS", "******************* FACEBOOK::onIOException *******************");
e.printStackTrace();
finish();
}
@Override
public void onFileNotFoundException(FileNotFoundException e, Object state) {
Log.d("BTS", "******************* FACEBOOK::onFileNotFoundException *******************");
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Image not found", Toast.LENGTH_LONG).show();
finish();
}
@Override
public void onFacebookError(FacebookError e, Object state) {
Log.d("BTS", "******************* FACEBOOK::onFacebookError *******************");
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Facebook error", Toast.LENGTH_LONG).show();
finish();
}
String msg="";
@Override
public void onComplete(String response, Object state) {
Log.d("BTS", "******************* FACEBOOK::onComplete *******************");
// TODO Auto-generated method stub
Log.d("Facebook-Example",
"News feed: " + response.toString());
JSONObject json;
/*JSONObject json = Util.parseJson(response);
final String pictureURL = json.getString("picture");
if (TextUtils.isEmpty(pictureURL)) {
* */
try {
json = Util.parseJson(response);
Log.d("Facebook-Example",
"News feed: " + json.toString(2));
final String post_id = json.getString("post_id");
if (TextUtils.isEmpty(post_id)) {
msg="Error in update status";
}else{
msg="Status updated";
}
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
//mProgressDialog.dismiss();
finish();
}
});
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FacebookError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
这是我从上一个活动传递的Bundle参数
byte[]data=null
Bundle params=新Bundle()
putByteArray参数(“照片”,数据);
参数putString(“标题”,状态)代码>
可以放在Bundle上的其他值
params.putString(“消息”,“此字符串将显示为状态消息”);
putString(“链接”,“这是要转到的URL”);
参数putString(“名称”,“这将出现在图片旁边”);
params.putString(“标题”,“这将出现在标题下”);
params.putString(“描述”,“这将出现在标题下”);
params.putString(“图片”,“这是要显示在帖子中的图像”);
兄弟,你是如何解决问题的?我也有同样的问题