在Facebook登录后调用新活动| Android
问题描述:
我在我的android应用程序中有2个活动。首先,我要求用户使用Facebook登录。在用户登录后,我收集用户数据,例如电子邮件,姓名并调用一个新的活动,将这些参数传递给它。下面是我的Facebook授权方法:在Facebook登录后调用新活动| Android
public void loginFB(final View v)
{
facebook.authorize(this, new String[] { "email", "read_stream" }, new DialogListener() {
@Override
public void onComplete(Bundle values) {
this.getlogininfo(v);
}
private void getlogininfo(View v) {
// TODO Auto-generated method stub
logininfo(v);
}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
}
下面是我的logininfo()
方法:
public void logininfo(final View v){
mAsyncRunner.request("me", new RequestListener(){
@Override
public void onComplete(String response, Object state) {
try{
Log.d("Profile", response.toString());
JSONObject json = Util.parseJson(response);
final String fname1 = json.getString("first_name");
final String lname1 = json.getString("last_name");
final String email = json.getString("email");
Intent fbLogged = new Intent();
Bundle passData = new Bundle();
passData.putString("fname", fname1);
passData.putString("lname", lname1);
passData.putString("email", email);
fbLogged.putExtras(passData);
fbLogged.setClass(v.getContext(), RequestFb.class);
startActivity(fbLogged);
}
catch(JSONException e){
Log.w("This", "eror");
}
}
@Override
public void onIOException(IOException e, Object state) {
// TODO Auto-generated method stub
}
@Override
public void onFileNotFoundException(FileNotFoundException e,
Object state) {
// TODO Auto-generated method stub
}
@Override
public void onMalformedURLException(MalformedURLException e,
Object state) {
// TODO Auto-generated method stub
}
@Override
public void onFacebookError(FacebookError e, Object state) {
// TODO Auto-generated method stub
}
});
}
所以,我的新的活动开始于获取用户数据的OnComplete()
。
这很好,但是当用户点击登录并登录Facebook时,第一个活动页面会在屏幕上停留几秒钟,然后调用下一个活动。有一个滞后。我该如何解决滞后问题?当用户点击登录并且登录被授权后,它应该让用户直接进行第二次活动。有什么建议么?
谢谢!
答
很简单,您正在新线程中运行fb图形请求(使用AsyncRunner),但只有在该请求完成后才会开始新活动,这就是为什么您会收到“滞后”的原因。
您应该运行在新的活动图请求,而不是中的第一个,是这样的:
public void loginFB(final View v) {
facebook.authorize(this, new String[] { "email", "read_stream" }, new DialogListener() {
@Override
public void onComplete(Bundle values) {
Intent fbLogged = new Intent(v.getContext(), RequestFb.class);
startActivity(fbLogged);
}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
}
public class RequestFb extend Activity {
protected void onCreate(Bundle savedInstanceState) {
Facebook facebook = new Facebook("YOUR_APP_ID");
AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(facebook);
asyncRunner.request("me", new RequestListener(){
try {
final JSONObject json = Util.parseJson(response);
final String fname1 = json.getString("first_name");
final String lname1 = json.getString("last_name");
final String email = json.getString("email");
runOnUiThread(new Runnable() {
public void run() {
// use the data
}
});
}
catch(JSONException e) {
Log.w("This", "eror");
}
});
}
}
感谢您指出了这一点。问题已经解决了。我在新的活动中调用图形请求。谢谢。 – Nerd