我坚持这两项活动。 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;
}
答案 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...
希望它能帮到你