从另一个活动在Android中的墙上发布

从另一个活动在Android中的墙上发布,android,facebook,session,facebook-graph-api,post,Android,Facebook,Session,Facebook Graph Api,Post,我有一个Android活动,使用Facebook方法登录并在墙上发布。 登录后,我想发布来自其他活动的,因此每次会话时我都需要重新打开。 这是在Facebook墙上发布的方法: public void postOnMyWall(String streamingLink, Context mycontext) { context = mycontext; pref = context.getSharedPreferences("AppPref", Context.MODE_P

我有一个Android活动,使用Facebook方法登录并在墙上发布。 登录后,我想发布来自其他活动的,因此每次会话时我都需要重新打开。 这是在Facebook墙上发布的方法:

public void postOnMyWall(String streamingLink, Context mycontext) {

    context = mycontext;  
    pref = context.getSharedPreferences("AppPref", Context.MODE_PRIVATE);
    String fbtoken = pref.getString("fbtoken", null);

    if(fbtoken != null) {

     if(!fbtoken.equals("")) {

         fbprogress = new ProgressDialog(context);

         Session session = Session.getActiveSession();

         if (session != null){

             Log.d("SOCIAL", "in posting wall, session is not null");

             // Check for publish permissions    
             List<String> permissions = session.getPermissions();
             if (!isSubsetOf(PERMISSIONS, permissions)) {
                 //pendingPublishReauthorization = true;
                 Session.NewPermissionsRequest newPermissionsRequest = new Session
                         .NewPermissionsRequest(this, PERMISSIONS);
                 session.requestNewPublishPermissions(newPermissionsRequest);
                 return;
             }

            Bundle postParams = new Bundle();
            postParams.putString("name", "name");
            postParams.putString("caption", "my caption");
            postParams.putString("description", "my desc");
            postParams.putString("link", "my link");
            postParams.putString("picture", "https://linkto/my.png");

            Request.Callback callback= new Request.Callback() {
                public void onCompleted(Response response) {
                    JSONObject graphResponse = response
                            .getGraphObject()
                            .getInnerJSONObject();
                    String postId = null;

                    fbprogress.dismiss();

                    try {
                        postId = graphResponse.getString("id");
                    } catch (JSONException e) {
                        /*
                        Log.i(activity.toString(),
                                "JSON error "+ e.getMessage());
                    */
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        //Toast.makeText(activity
                         //       .getApplicationContext(), 
                         //       "ERROR: " + error.getErrorMessage(),
                         //       Toast.LENGTH_SHORT).show();
                        fbprogress.dismiss();
                        Toast.makeText(context, "Errore during posting on Facebook", Toast.LENGTH_SHORT).show();

                    } else {

                         Toast.makeText(context, "posted on Facebook", Toast.LENGTH_SHORT).show();

                    }
                }
            };

            fbprogress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            fbprogress.setIndeterminate(true);
            fbprogress.show();

            Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback);

            final RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();

            Handler fb_post_handler = new Handler();
            fb_post_handler.postDelayed(new Runnable()
            {
              @Override
              public void run() {
                  if ( task.getStatus() == AsyncTask.Status.RUNNING ) {
                      task.cancel(true);
                      Toast.makeText(SocialAccess.this, "Connection timed out", Toast.LENGTH_SHORT).show();
                      fbprogress.dismiss();


                  }
              }
            }, 20000 );


        } 


         else {
             Log.d("SOCIAL", "in posting wall, session is null");
         }





        } // end  if(!fbtoken.equals("") && fbtoken != null)

    } // end token != null


        else 
        {
            Log.d("SOCIAL","not logged in fb");
            fbloginrequested = true;

        }
      }
public void postOnMyWall(字符串streamingLink,Context mycontext){
上下文=mycontext;
pref=context.getSharedReferences(“AppPref”,context.MODE\u PRIVATE);
字符串fbtoken=pref.getString(“fbtoken”,null);
如果(fbtoken!=null){
如果(!fbtoken.equals(“”){
fbprogress=新建ProgressDialog(上下文);
Session=Session.getActiveSession();
if(会话!=null){
Log.d(“社交”,“在张贴墙中,会话不为空”);
//检查发布权限
List permissions=session.getPermissions();
如果(!isSubsetOf(权限、权限)){
//pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新会话
.NewPermissionsRequest(此,权限);
session.requestNewPublishPermissions(newPermissionsRequest);
返回;
}
Bundle postParams=新Bundle();
postParams.putString(“名称”、“名称”);
putString(“标题”、“我的标题”);
postParams.putString(“描述”、“我的描述”);
postParams.putString(“链接”、“我的链接”);
postParams.putString(“图片”https://linkto/my.png");
Request.Callback=new Request.Callback(){
未完成公共无效(响应){
JSONObject graphResponse=响应
.getGraphObject()
.getInnerJSONObject();
字符串postId=null;
fbprogress.disclose();
试一试{
postId=graphResponse.getString(“id”);
}捕获(JSONException e){
/*
Log.i(activity.toString(),
“JSON错误”+e.getMessage());
*/
}
FacebookRequestError=response.getError();
if(错误!=null){
//Toast.makeText(活动
//.getApplicationContext(),
//“错误:”+错误。getErrorMessage(),
//吐司。长度(短)。show();
fbprogress.disclose();
Toast.makeText(上下文,“在Facebook上发布时出错”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(上下文,“发布在Facebook上”,Toast.LENGTH_SHORT.show();
}
}
};
fbprogress.setProgressStyle(ProgressDialog.STYLE_微调器);
fbprogress.setUndeterminate(true);
fbprogress.show();
请求=新请求(会话“me/feed”、后参数、HttpMethod.POST、回调);
最终RequestAsyncTask任务=新RequestAsyncTask(请求);
task.execute();
Handler fb_post_Handler=new Handler();
fb_post_handler.postDelayed(新的Runnable()
{
@凌驾
公开募捐{
if(task.getStatus()==AsyncTask.Status.RUNNING){
任务。取消(true);
Toast.makeText(SocialAccess.this,“连接超时”,Toast.LENGTH_SHORT.show();
fbprogress.disclose();
}
}
}, 20000 );
} 
否则{
Log.d(“社交”,“在张贴墙中,会话为空”);
}
}//如果(!fbtoken.equals(“”&&fbtoken!=null)结束
}//结束标记!=null
其他的
{
Log.d(“社交”、“未登录fb”);
fbloginrequested=真;
}
}
从其他活动中,我打电话:

SocialAccess socialogin=新的SocialAccess(); postOnMyWall(facebook\u post\u链接,上下文)

如果每次登录时不重新打开会话,会话似乎总是空的


有什么建议吗?

我知道这不是对您具体问题的回答,但是,您是否尝试过
Temboo
?我甚至记不起上一次处理Facebook SDK实现的时间了。在大多数情况下,这只是浪费时间。使用
Temboo
您可以通过调用简单的方法与所有社交网络进行交互。

如果您在应用程序中登录过一次,但会话结果仍然为空,您可以尝试此方法

 myFbSession = Session.getActiveSession();
 if(myFbSession!=null){
   // your code here
 }else{
         myFbSession = Session
                    .openActiveSessionFromCache(context);
         if(myFbSession!=null){
          // you can call your postOnWall method again here
          }
 }
如果上述解决方案不起作用,Github上就有一个facebook和twitter共享可用的身份验证工具,只能验证一次