Android / Facebook:在墙上发布消息

时间:2013-01-28 11:15:19

标签: android facebook facebook-graph-api

我想通过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() {}
            });
 }

无法正常工作

1 个答案:

答案 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");