从Android应用程序的Facebook的墙后的错误? [英] Facebook wall post error from Android app?

查看:253
本文介绍了从Android应用程序的Facebook的墙后的错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我app.I

我已经成功地集成FB要自动邮政一些文字,链接,图片到我的Facebook墙上从Facebook account.I给应用程序的权限后,已使用下面提供的逻辑尝试,但我得到

  {响应:响应code:403,graphObject:空,错误:{错误code:200,错误类型:
OAuthException,errorMessege:(#200)用户没有授权的应用程序
执行此操作},isFromCache:假的

FacebookActivity.java

 公共类FacebookActivity扩展FragmentActivity {私人MainFragment mainFragment;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    如果(savedInstanceState == NULL){
        //添加片段初始设置活动
        mainFragment =新MainFragment();
        getSupportFragmentManager()
        .beginTransaction()
        。新增(android.R.id.content,mainFragment)
        。承诺();
    }其他{
        //或者设置为从恢复状态信息的片段
        mainFragment =(MainFragment)getSupportFragmentManager()
        .findFragmentById(android.R.id.content);
    }
}
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    //充气菜单;如果是present这增加了项目操作栏。
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    //处理动作栏项目点击这里。操作栏会
    //自动处理上点击主页/向上按钮,只要
    //你在AndroidManifest.xml中指定一个父活动。
    INT ID = item.getItemId();
    如果(ID == R.id.action_settings){
        返回true;
    }
    返回super.onOptionsItemSelected(项目);
}}

MainFragment.java

 公共类MainFragment扩展片段{
私有静态最后弦乐TAG =MainFragment;
私人UiLifecycleHelper uiHelper;私人Session.StatusCallback回调=新Session.StatusCallback(){
    @覆盖
    公共无效呼叫(会话的会话,SessionState会状态,异常除外){
        onSessionStateChange(会话,状态除外);
    }};私人无效onSessionStateChange(会话的会话,SessionState会状态,异常除外){
    如果(state.isOpened()){
        捆绑PARAMS =新包();
        params.putString(信息,嘿,我使用这个应用程序);
        params.putString(名,嗜血判官);
        params.putString(标题,londatiga.net);
        params.putString(链接,http://www.londatiga.net);
        params.putString(说明,嗜血判官,七岁腊肠谁爱捉猫,吃胡萝卜和krupuk);
        params.putString(图片,http://twitpic.com/show/thumb/6hqd44);        字符串URI =/我/饲料消息=?+嘿,我使用这个应用程序++&放大器;的access_token =+ session.getAccessToken();        的uri = uri.replace(,%20);        新的请求(                会议上,
                URI,
                参数,可以
                HttpMethod.POST,
                新Request.Callback(){
                       公共无效onCompleted(响应响应){
                                                         Toast.makeText(getActivity(),response.toString(),Toast.LENGTH_LONG).show();
                                                }
                                            }
                                    ).executeAsync();
        Log.i(TAG,已登录...);
    }否则如果(state.isClosed()){
        Log.i(TAG注销...);
    }
}@覆盖
公共查看onCreateView(LayoutInflater气筒,
        ViewGroup中的容器中,
        捆绑savedInstanceState){
    查看查看= inflater.inflate(R.layout.activity_facebook,集装箱,FALSE);
    LoginButton authButton =(LoginButton)view.findViewById(R.id.authButton);    如果(Session.getActiveSession()。isOpened()){
        Toast.makeText(getActivity(),登录到FB,1).show();
        authButton.setReadPermissions(Arrays.asList(电子邮件,read_stream));
        authButton.clearPermissions();
        authButton.setPublishPermissions(Arrays.asList(publish_actions));
    }其他{
        authButton.setFragment(本);
        authButton.setReadPermissions(Arrays.asList(public_profile));
    }
    返回视图。
}@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    uiHelper =新UiLifecycleHelper(getActivity(),回调);
    uiHelper.onCreate(savedInstanceState);
}@覆盖
公共无效onResume(){
    super.onResume();
    会话的会话= Session.getActiveSession();
    如果(会话= NULL&放大器;!&安培;
           (session.isOpened()|| session.isClosed())){
        onSessionStateChange(会话,session.getState(),NULL);
    }    uiHelper.onResume();
}@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,结果code,数据);
    uiHelper.onActivityResult(要求code,结果code,数据);
}@覆盖
公共无效的onPause(){
    super.onPause();
    uiHelper.onPause();
}@覆盖
公共无效的onDestroy(){
    super.onDestroy();
    uiHelper.onDestroy();
}@覆盖
公共无效的onSaveInstanceState(捆绑outState){
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}}


解决方案

终于大量的研究后,我已经修改了我的课correctly.Here我张贴我修改code,可以帮助别人。

 公共类MainFragment扩展片段{
私有静态最后弦乐TAG =MainFragment;
私人UiLifecycleHelper uiHelper;私人Session.StatusCallback回调=新Session.StatusCallback(){
    @覆盖
    公共无效呼叫(会话的会话,SessionState会状态,异常除外){
        onSessionStateChange(会话,状态除外);
    }};私人无效onSessionStateChange(会话的会话,SessionState会状态,异常除外){
    如果(state.isOpened()){
        Log.i(TAG,已登录...);
        publishStory(会话);
    }否则如果(state.isClosed()){
        Log.i(TAG注销...);
    }
}
公共无效publishStory(会话currentSession){
     捆绑PARAMS =新包();
     params.putString(信息,嘿,我使用这个应用程序);
        params.putString(名,嗜血判官);
        params.putString(标题,londatiga.net);
        params.putString(链接,http://www.londatiga.net);
        params.putString(说明,嗜血判官,七岁腊肠谁爱捉猫,吃胡萝卜和krupuk);
        params.putString(图片,http://twitpic.com/show/thumb/6hqd44);     WebDialog feedDialog =(新WebDialog.FeedDialogBu​​ilder(getActivity(),currentSession,则params))
       .setOnCompleteListener(新OnCompleteListener(){       @覆盖
       公共无效的onComplete(束值,FacebookException错误){
        如果(错误== NULL){
         //当故事被张贴,呼应成功
         //和帖子的ID。
         最终字符串postid = values​​.getString(POST_ID);
         如果(帖子ID!= NULL){
             意图I =新意图(getActivity(),MainActivity.class); // FacebookActivity.class);
             startActivity(ⅰ);
             getActivity()完成()。 //做一些东西
         }其他{
         //用户点击了取消按钮
         Toast.makeText(getActivity(),
           发布取消,Toast.LENGTH_SHORT).show();
         }
        }否则如果(错误的instanceof FacebookOperationCanceledException){
         //用户点击X按钮
         Toast.makeText(getActivity(),
          发布取消,Toast.LENGTH_SHORT).show();
        }其他{
         //通用,例如:网络错误
         Toast.makeText(getActivity(),
          错误发帖故事,Toast.LENGTH_SHORT).show();
        }
       }      。})setFrom()建设();
     feedDialog.show();    }@覆盖
公共查看onCreateView(LayoutInflater气筒,
        ViewGroup中的容器中,
        捆绑savedInstanceState){
    查看查看= inflater.inflate(R.layout.activity_facebook,集装箱,FALSE);
    LoginButton authButton =(LoginButton)view.findViewById(R.id.authButton);    如果(Session.getActiveSession()。isOpened()){
        Toast.makeText(getActivity(),登录到FB,1).show();
    }其他{
        authButton.setFragment(本);
        authButton.setReadPermissions(Arrays.asList(public_profile));
    }
    返回视图。
}@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    uiHelper =新UiLifecycleHelper(getActivity(),回调);
    uiHelper.onCreate(savedInstanceState);
}@覆盖
公共无效onResume(){
    super.onResume();
    会话的会话= Session.getActiveSession();
    如果(会话= NULL&放大器;!&安培;
           (session.isOpened()|| session.isClosed())){
        onSessionStateChange(会话,session.getState(),NULL);
    }    uiHelper.onResume();
}@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,结果code,数据);
    uiHelper.onActivityResult(要求code,结果code,数据);
}@覆盖
公共无效的onPause(){
    super.onPause();
    uiHelper.onPause();
}@覆盖
公共无效的onDestroy(){
    super.onDestroy();
    uiHelper.onDestroy();
}@覆盖
公共无效的onSaveInstanceState(捆绑outState){
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}}

I have successfully integrated FB with my app.I want to auto post some text,links,images to my facebook wall after giving app permission from facebook account.I have tried using below provided logic but am getting

{Response: responseCode: 403,graphObject: null,error: {errorCode: 200,errorType: 
OAuthException,errorMessege: (#200) The user hasn't authorized the application
to perform this action}, isFromCache:false

FacebookActivity.java

public class FacebookActivity extends FragmentActivity {

private MainFragment mainFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null) {
        // Add the fragment on initial activity setup
        mainFragment = new MainFragment();
        getSupportFragmentManager()
        .beginTransaction()
        .add(android.R.id.content, mainFragment)
        .commit();
    } else {
        // Or set the fragment from restored state info
        mainFragment = (MainFragment) getSupportFragmentManager()
        .findFragmentById(android.R.id.content);
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

MainFragment.java

public class MainFragment extends Fragment {
private static final String TAG = "MainFragment";
private UiLifecycleHelper uiHelper; 

private Session.StatusCallback callback=new Session.StatusCallback(){
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }

};  

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (state.isOpened()) {
        Bundle params = new Bundle();
        params.putString("message", "Hey I am using this app");
        params.putString("name", "Dexter");
        params.putString("caption", "londatiga.net");
        params.putString("link", "http://www.londatiga.net");
        params.putString("description", "Dexter, seven years old dachshund who loves to catch cats, eat carrot and krupuk");
        params.putString("picture", "http://twitpic.com/show/thumb/6hqd44");

        String uri = "/me/feed?message=" + "Hey I am using this app" + "" + "&access_token=" + session.getAccessToken();

        uri = uri.replace(" ", "%20");

        new Request(

                session,
                uri,
                params,
                HttpMethod.POST,
                new Request.Callback() {
                       public void onCompleted(Response response) {
                                                         Toast.makeText(getActivity(), response.toString(), Toast.LENGTH_LONG).show();
                                                }
                                            }
                                    ).executeAsync();
        Log.i(TAG, "Logged in...");
    } else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }
}

@Override
public View onCreateView(LayoutInflater inflater, 
        ViewGroup container, 
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_facebook, container, false);
    LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);

    if(Session.getActiveSession().isOpened()){
        Toast.makeText(getActivity(), "logged in to FB", 1).show();
        authButton.setReadPermissions(Arrays.asList("email", "read_stream"));
        authButton.clearPermissions();
        authButton.setPublishPermissions(Arrays.asList("publish_actions"));
    }else{
        authButton.setFragment(this);
        authButton.setReadPermissions(Arrays.asList("public_profile"));
    }
    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(getActivity(), callback);
    uiHelper.onCreate(savedInstanceState);
}

@Override
public void onResume() {
    super.onResume();
    Session session = Session.getActiveSession();
    if (session != null &&
           (session.isOpened() || session.isClosed()) ) {
        onSessionStateChange(session, session.getState(), null);
    }

    uiHelper.onResume();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

}

解决方案

finally after lots of research i have modified my class correctly.Here i am posting my modified code that may help others.

public class MainFragment extends Fragment {
private static final String TAG = "MainFragment";
private UiLifecycleHelper uiHelper; 

private Session.StatusCallback callback=new Session.StatusCallback(){
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }

};  

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (state.isOpened()) {
        Log.i(TAG, "Logged in...");
        publishStory(session);
    } else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }
}


public void publishStory(Session currentSession) {
     Bundle params = new Bundle();
     params.putString("message", "Hey I am using this app");
        params.putString("name", "Dexter");
        params.putString("caption", "londatiga.net");
        params.putString("link", "http://www.londatiga.net");
        params.putString("description", "Dexter, seven years old dachshund who loves to catch cats, eat carrot and krupuk");
        params.putString("picture", "http://twitpic.com/show/thumb/6hqd44");                                                

     WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(getActivity(),currentSession, params))
       .setOnCompleteListener(new OnCompleteListener() {

       @Override
       public void onComplete(Bundle values,FacebookException error) {
        if (error == null) {
         // When the story is posted, echo the success
         // and the post Id.
         final String postId = values.getString("post_id");
         if (postId != null) {
             Intent i=new Intent(getActivity(),MainActivity.class);//FacebookActivity.class);
             startActivity(i);
             getActivity().finish();                               // do some stuff
         } else {
         // User clicked the Cancel button
         Toast.makeText(getActivity(),
           "Publish cancelled", Toast.LENGTH_SHORT).show();
         }
        } else if (error instanceof FacebookOperationCanceledException) {
         // User clicked the "x" button
         Toast.makeText(getActivity(),
          "Publish cancelled", Toast.LENGTH_SHORT).show();
        } else {
         // Generic, ex: network error
         Toast.makeText(getActivity(),
          "Error posting story", Toast.LENGTH_SHORT).show();
        }
       }

      }).setFrom("").build();
     feedDialog.show();

    }



@Override
public View onCreateView(LayoutInflater inflater, 
        ViewGroup container, 
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_facebook, container, false);
    LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);

    if(Session.getActiveSession().isOpened()){
        Toast.makeText(getActivity(), "logged in to FB", 1).show();
    }else{
        authButton.setFragment(this);
        authButton.setReadPermissions(Arrays.asList("public_profile"));
    }
    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(getActivity(), callback);
    uiHelper.onCreate(savedInstanceState);
}

@Override
public void onResume() {
    super.onResume();
    Session session = Session.getActiveSession();
    if (session != null &&
           (session.isOpened() || session.isClosed()) ) {
        onSessionStateChange(session, session.getState(), null);
    }

    uiHelper.onResume();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

}

这篇关于从Android应用程序的Facebook的墙后的错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆