2013-10-28 19 views
7

ERRORE: CursorWrapperInner (10908): Cursore finalizzato senza previa vicino()Facebook frammento Android login

Ho cercato di ottenere il codice di facebook per lavorare con la mia app. Per qualche motivo anche i campioni ottengono questo errore? Non so perché, ma qui è il mio frammento a cui ottengo lo stesso errore di cui sopra.

codice:

package com.fragments; 

public class MainDisplayFragment extends Fragment { 

    private static final String TAG = "MainFragment"; 
    private UiLifecycleHelper uiHelper; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.main_display_fragment, container, 
       false); 

     uiHelper = new UiLifecycleHelper(this.getActivity(), callback); 
     uiHelper.onCreate(savedInstanceState); 

     // Facebook login button. 
     LoginButton authButton = (LoginButton) view 
       .findViewById(R.id.authButton); 
     authButton.setFragment(this); 
     // Set Application ID. 
     authButton.setReadPermissions(Arrays.asList("user_friends", 
       "user_about_me", "user_birthday", "user_likes", "user_status")); 

     return view; 
    } 

    private void onSessionStateChange(Session session, SessionState state, 
      Exception exception) { 
     if (state.isOpened()) { 
      Log.i(TAG, "Logged in..."); 
     } else if (state.isClosed()) { 
      Log.i(TAG, "Logged out..."); 
     } 
    } 

    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    @Override 
    public void onResume() { 
     super.onResume(); 
     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); 
    } 
} 
+0

Hai provato questo codice all'interno di attività? A cosa serve? 'authButton.setFragment (this);' Hai provato le preferenze condivise per il recupero dello stato dell'utente? C'è qualche possibilità che il 'callback' restituisca un valore nullo per ognuno di essi? –

+0

Ho risolto questo problema per un po 'prima del tuo commento, mi scuso per non aver pubblicato prima. Guarda sotto per tutti con problemi simili. – thekevshow

risposta

0

La risposta al mio problema è venuto dal movimento l'interazione con l'attività. In questo modo abbiamo potuto monitorare gli stati della sessione all'interno della nostra attività principale. Sfortunatamente, secondo la documentazione non avrebbe dovuto essere necessario ma questa è la correzione che ho usato per quelli con problemi persistenti.

CODICE:

// session callback status 
    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 

      onSessionStateChange(session, state, exception); 
     } 
    }; 

    // on click listener for the login button 
    public OnClickListener loginButtonListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      // call the handler 
      onLoginButtonClick(); 

     } 
    }; 

    // session callback 
    public void onLoginButtonClick() { 

     Session session = Session.getActiveSession(); 
     if (!session.isOpened() && !session.isClosed()) { 
      session.openForRead(new Session.OpenRequest(this) 
        .setCallback(callback)); 
     } else { 
      Session.openActiveSession(this, true, callback); 
     } 

    } 

    public void intializeSession(Bundle savedInstanceState) { 

     // initialize the facebook session 
     Session session = Session.getActiveSession(); 
     if (session == null) { 
      if (savedInstanceState != null) { 
       session = Session.restoreSession(this, null, callback, 
         savedInstanceState); 
      } 
      if (session == null) { 
       session = new Session(this); 
      } 
      Session.setActiveSession(session); 
      if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
       session.openForRead(new Session.OpenRequest(this) 
         .setCallback(callback)); 
      } 
     } 

    } 

    private void onSessionStateChange(Session session, SessionState state, 
      Exception exception) { 

     // IF the session is opened 
     if (session.isOpened()) { 

      //TODO YOUR INTERACTIONS HERE WHEN OPEN 

     } 
     // else IF there session is closed 
     else if (session.isClosed()) { 

      // TODO YOUR INTERACTIONS HERE WHEN CLOSED 

     } 
    }