2个活动之间的意图

时间:2014-05-04 17:27:11

标签: android facebook android-intent

我坚持这两项活动。 Main必须使用facebook凭据登录(如果用户最近登录,应用程序使用之前保存的令牌),然后获取用户的id,通过调用LoggedActivity将其保存到intent中。但是当我尝试从第二个活动中的意图中提取数据时,它说它是空的!帮帮我吧!

修改

  

我发现了问题,但我无法解决它。   Request.executeBatchAsync(request)通过我获取用户的id启动一个线程。问题是我必须等待线程完成获取id,所以它可以保存在Intent中!在FB API中没有方法可以做到这一点......请帮助我,我差不多完成了:D

**最终编辑**

  

解决了!正如我在上一次编辑中所说的那样。我刚刚解决了它在onCompleted方法中创建意图:D感谢所有人!

MainActivity

SharedPreferences sp;
AccessToken token;
private Button connect;
private String id;
private String access_token;
private String expires;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    connect=(Button)findViewById(R.id.authButton);
    Intent myIntent = new Intent(this,LoggedActivity.class);
    connect.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View arg0) 
        {
                openFacebook();
        }
    });

    sp=getPreferences(MODE_PRIVATE);
    access_token=sp.getString("access_token", null);
    expires=sp.getString("access_expires",null);

    if (access_token!=null  && expires!=null)
    {
        token = AccessToken.createFromExistingAccessToken(access_token,null, null, AccessTokenSource.TEST_USER, null);
        if (token!=null)
        {
            Session.openActiveSessionWithAccessToken(this,token,new Session.StatusCallback() 
            {
                // callback when session changes state

                @Override
                public void call(final Session session, SessionState state, Exception exception) 
                {
                    if (session.isOpened()) 
                    {
                        Request request =  Request.newMeRequest(session, new GraphUserCallback() {       
                        public void onCompleted(GraphUser user, Response response) 
                        {                                
                            if (user != null) 
                            {
                                id=user.getId();    
                            }

                        }
                        });

                        Request.executeBatchAsync(request); 
                    }
                }
            });

            myIntent.putExtra("Id", id);
            startActivity(myIntent);
            finish();
        }  
    }    
}



@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 void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

private void openFacebook()
{
    Session.openActiveSession(this, true, new Session.StatusCallback()
    {   
        // callback when session changes state
        @Override
        public void call(final Session session, SessionState state, Exception exception) 
        {
            if (session.isOpened()) 
            {
                Intent myIntent = new Intent(MainActivity.this, LoggedActivity.class);
                Editor editor = sp.edit();
                editor.putString("access_token",session.getAccessToken());
                editor.putString("access_expires",session.getExpirationDate().toString());
                editor.commit();

                Request request =  Request.newMeRequest(session, new GraphUserCallback() {       
                public void onCompleted(GraphUser user, Response response) 
                {                                
                    if (user != null) 
                    {
                        id=user.getId();
                    }

                }
                });

                Request.executeBatchAsync(request);
                myIntent.putExtra("Id", id);

                startActivity(myIntent);
            }

        }
    }); 
}

LoggedActivity

     private ProfilePictureView profilePicture;

@Override
public void onCreate(Bundle savedInstanceState)
{
    Intent myIntent = getIntent();
    String id = myIntent.getStringExtra("Id"); 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.app_main);

    profilePicture = (ProfilePictureView) findViewById(R.id.userImage);
    profilePicture.setProfileId(id);

}


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;
}

3 个答案:

答案 0 :(得分:0)

而不是

myIntent.putExtra("Id", id);

尝试使用

myIntent.getExtras().putString("Id", id);

答案 1 :(得分:0)

您应该使用

String myString= intent.getExtras().getString("id");

获取LogIn活动中的字符串

答案 2 :(得分:0)

当您收到消息时,它会以意图的形式出现,因此只需在代码中添加两行:

Bundle extras=intent.getExtras();
//check if extras is not null
If(extras!=null)
String msg=(string)extras.get("message");//remember here message is the key that you send from the server...

希望它能帮到你