2016-05-19 22 views
0

Facebookのログインにフラグメントを使用しています。通常はすべてがうまくいく。しかし、facebookでユーザがログインしてfacebookページにリダイレクトしてプログラムを許可するが、(CallbackManager.onActivityResultを使用していても)プログラムはコールバックを処理してバックグラウンドを保つことができません。私はどのようにコールバックを処理できますか? 相対コードスニペット:あなたが直接onActivityResult聞くことができないフラグメントインサイドAndroid FacebookのログインonActivityResult

public void onCreate(Bundle savedInstanceState) { 
     FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
     super.onCreate(savedInstanceState); 
     callbackManager = CallbackManager.Factory.create(); 
    } 

    public void onResume() { 
     Log.i("tago" , "onResume"); 
     super.onResume(); 
     Profile profile = Profile.getCurrentProfile(); 
     if (profile != null) { 
      tumisim = profile.getName(); 
      firstname = profile.getFirstName(); 
      lastname = profile.getLastName(); 
      sharedtumisimkaydet(tumisim); 
      sharedfirstnamekaydet(firstname); 
      sharedlastnamekaydet(lastname); 
     } 
    } 

    public void onStop() { 
     super.onStop(); 
     getActivity().finish(); 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.facebookfragment, container, false); 
     int[] taniticiresimler = {R.mipmap.aciklama,R.mipmap.dene_uc,R.mipmap.yenigus,R.mipmap.galp}; 
     CustomPagerAdapter pagerAdapter = new CustomPagerAdapter(getActivity(),taniticiresimler); 
     FadingIndicator indicator = (FadingIndicator)view.findViewById(R.id.circleIndicator); 
     ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager); 
     viewPager.setAdapter(pagerAdapter); 
     indicator.setViewPager(viewPager); 
     indicator.setFillColor(Color.BLUE); 
     indicator.setStrokeColor(Color.BLACK); 
     indicator.setRadius(15f); 
     LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button); 
     loginButton.setReadPermissions(Arrays.asList("user_friends", "public_profile", "email")); 
     loginButton.setFragment(this); 
     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       profile = Profile.getCurrentProfile(); 
       if (profile.getId() != null) { 
        facebookID = profile.getId(); 
        String a = sharedFacebookIDAl(); 
        if (a.equals("defaultfacebookID")) { 
         sharedilkgiriskaydet(true); 
        }else if(!a.equals(facebookID)){ 
         sharedilkgiriskaydet(true); 
        }else{ 
         sharedilkgiriskaydet(false); 
        } 
        sharedfacebookIDkaydet(facebookID); 
        KullaniciProfilCek kPC = new KullaniciProfilCek(); 
        kPC.execute(profile.getId()); 
       } 
       GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject object, GraphResponse response) { 
           try { 
            email = object.getString("email"); 
            sharedemailkaydet(email); 
            cinsiyet = object.getString("gender"); 
            sharedcinsiyetkaydet(cinsiyet); 
            coverphotourl = object.getJSONObject("cover").getString("source"); 
            sharedcoverphotourlkaydet(coverphotourl); 
           } catch (JSONException e) { 
            e.printStackTrace(); 
           } 
          } 
         }); 
       Bundle parameters = new Bundle(); 
       parameters.putString("fields", "email,gender,cover"); 
       request.setParameters(parameters); 
       request.executeAsync(); 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(getActivity(), "Facebook Login iptal edildi", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Toast.makeText(getActivity(), "Facebook Login hata oluşturdu", Toast.LENGTH_LONG).show(); 
      } 
     }); 
     return view; 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
     Log.i("tago" , "geri geldi"); 
    } 

答えて

0

。アクティビティ内のonActivityResultの結果を聞きます。フラグメントを保持するアクティビティに以下のコードを入れてください。

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
    Fragment fragment = (Fragment) getChildFragmentManager().findFragmentByTag(childTag); 
    if (fragment != null) { 


     fragment.onActivityResult(requestCode, resultCode, intent); 
     } 
} 

、次いで断片内部OnActivityResult()が動作します。

+0

:これはここであなたが今読むべきドキュメントのスーパーすなわちonCreate()などでの呼び出しの必要性とは何も得ませんでした。 –

0

あなたはonActivityResult()を間違って使用しています。あなたが必要と思わない限り、スーパークラスの実装を呼び出さないでください。あなたができるもちろん

https://developer.android.com/training/basics/intents/result.html

+0

しかし、通常は動作し、初めて動作しません(スーパーなし)。 – CaveMan

関連する問題