我想通过Android应用程序在自己的墙上发布消息。我有loginToFacebook()方法登录。点击一个按钮,如果用户登录,我想要发布一条消息。我对facebook API并不是很熟悉,所以我看了facebook开发者文档和互联网上的其他网站,提出了随后的代码。然而,我的墙上没有贴出任何消息。显然我想念一些东西,但我不知道我的LogCat上没有错误。
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() {}
});
}
无法正常工作
答案 0 :(得分:-1)
我已将此活动类用于帖子图片:
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 params
byte[] data = null;
Bundle params = new Bundle();
params.putByteArray("photo", data);
params.putString("caption", status);
可以放在Bundle上的其他值
params.putString("message", "This string will appear as the status message");
params.putString("link", "This is the URL to go to");
params.putString("name", "This will appear beside the picture");
params.putString("caption", "This will appear under the title");
params.putString("description", "This will appear under the caption");
params.putString("picture", "This is the image to appear in the post");