2013-10-28 27 views
7

BŁĄD: CursorWrapperInner (10908): Kursor sfinalizowane bez uprzedniej Close()Facebook android fragment logowanie

Próbowałem dostać kod facebook pracować z mojej aplikacji. Z jakiegoś powodu nawet próbki otrzymują ten błąd? Nie wiem dlaczego, ale tutaj jest mój fragment, do którego dostaję ten sam błąd, jak podano powyżej.

Kod:

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

Czy próbowałeś ten kod wewnątrz działalności? Po co to? 'authButton.setFragment (this);' Czy próbowałeś udostępnionych preferencji do pobierania stanu użytkownika? Czy istnieje możliwość, że 'callback' zwróci wartość pustą dla żadnego z nich? –

+0

Mam to ustalone na chwilę przed twoim komentarzem, przepraszam za nie publikowanie wcześniej. Spójrz poniżej na wszystkie z podobnymi problemami. – thekevshow

Odpowiedz

0

Odpowiedź przyszła do mojego problemu z przeniesieniem interakcji z działalnością. W ten sposób możemy monitorować stany sesji w ramach naszej głównej działalności. Niestety, zgodnie z dokumentacją nie powinno to być konieczne, ale jest to poprawka, z której korzystałem dla osób, u których występują problemy.

KOD:

// 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 

     } 
    } 
Powiązane problemy