2015-04-13 2 views
1

У меня проблема с моим приложением. У меня есть фрагмент в моей деятельности, который вызывает сеанс входа в facebook. Когда логин будет завершен, приложение вернется к активности. Я хочу, чтобы, когда пользователь был правильно зарегистрирован, он перенаправляется на другое действие. Теперь вставьте сюда код: Это фрагмент, содержащийся в деятельности:facebook android call activity

public class FBSFragment extends android.support.v4.app.Fragment { 


private boolean logged; 
private Activity ctx; 
private Session.StatusCallback callback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
}; 
private UiLifecycleHelper uiHelper; 
private View view; 




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

} 



@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.loginfb, container, false); 
    ctx=getActivity(); 
    LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); 
    authButton.setOnErrorListener(new LoginButton.OnErrorListener() { 

     @Override 
     public void onError(FacebookException error) { 
      Log.e("FBSFragment", "Error " + error.getMessage()); 
     } 
    }); 
    authButton.setReadPermissions(Arrays.asList("public_profile","email")); 

    authButton.setFragment(this.getTargetFragment()); 




    return view; 

} 

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
    final Intent myintent = new Intent(getActivity(), DataActivityStudent.class); 
    final Intent closint=new Intent(this.getActivity(),LandingActivity.class); 

    System.out.println(session.getPermissions()); 


    if (session.isOpened()) { 
     Log.i("FBSFragment", "Logged in..."); 

     new Request(session,"me",null, HttpMethod.GET,new Request.Callback(){ 
      public void onCompleted(Response response){ 

       String email=null; 
       String nome=null; 
       try { 
        email=response.getGraphObject().getProperty("email").toString(); 
        nome=response.getGraphObject().getProperty("first_name").toString(); 

       } 
       catch(NullPointerException e){ 
        System.out.println(response.getError()); 
       } 
       Bundle bundle=new Bundle(); 
       bundle.putString("Mail",email); 
       bundle.putString("Nome",nome); 
       Intent myintent = new Intent(view.getContext(), RegistrationStudent.class); 
       startActivity(myintent); 

      } 

     }).executeAsync(); 


    } else if (session.isClosed()) { 
     Log.i("FBSFragment", "Logged out..."); 

    } 



} 

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

}

С помощью этого кода, когда пользователь вошел в систему, он возвращается в LoginActivity деятельности (которые содержат FBSFragment) на одну секунду и перенаправляется на активность RegistrationStudent. Я хочу, чтобы приложение немедленно переключилось на активность RegistrationStudent, не передавая действие, содержащее FBSFragment. Помоги мне!

ответ

1

Если вы хотите, чтобы перенаправление на новое действие произошло сразу, вам нужно будет переместить намерение вне обратного вызова запроса, поскольку намерение не будет срабатывать до вызова обратного вызова.

Не похоже, что вы передаете данные из запроса в намерении в качестве дополнительного, поэтому почему бы не сделать запрос «я» в действии RegistrationStudent.

+0

Итак, ваш совет состоит в том, чтобы переместить намерение снаружи (после executeAsync()) и переместить весь запрос «me» в этом действии? – hteo

+0

Ну, это зависит от того, что вы ищете. Если вам нужны данные в FBSFragment, вам нужно сохранить их, как есть. Если вы этого не сделаете, да, переместите намерение после executeAsync(). Причина, по которой требуется загрузка на пару секунд, заключается в том, что он должен дождаться завершения запроса Async до того, как будет вызван обратный вызов. – The1Fitz

+0

Спасибо. Я попробую, и я дам вам знать – hteo