2014-03-14 3 views
0

내 해시 키와 내가 Facebook에서 말한 모든 작업을 확인했습니다. 내 페이스 북 facebook.isSessionValid() 작동하지 않음은 내가 사용한 코드 아래에서 찾으십시오. 처음 사용자가 저장소에 sharepreference에 토큰을 기록하고 토큰을 사용하여 얻을Facebook sdk + facebook.isSessionValid() 작동하지 않음

package com.maintab; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import org.apache.http.auth.MalformedChallengeException; 
import org.json.JSONObject; 
import com.example.tesfragement.*; 
import com.facebook.android.DialogError; 
import com.facebook.android.Facebook; 
import com.facebook.android.Facebook.DialogListener; 
import com.facebook.android.FacebookError; 
import com.facebook.android.Util; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.service.textservice.SpellCheckerService.Session; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.Toast; 


public class Login extends Fragment { 

    View view; 
    ImageView loginbuttton,logoutbutton; 
    String app_id="*************"; 

    Facebook fb=new Facebook(app_id); 

    public Login() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     view= inflater.inflate(R.layout.login, container, false); 
     loginbuttton=(ImageView) view.findViewById(R.id.loinbutton); 
     loginbuttton.setOnClickListener(btnClick); 

     //here change the image according to session 
     logoutbutton=(ImageView)view.findViewById(R.id.greenbutton); 
     updateButtonImage(); 
     //here facebook cording will go 
     //facebook fb=new Login() 

     return view; 
    } 

    private void updateButtonImage() 
    { 
     if(fb.isSessionValid()) 
     { 
      loginbuttton.setImageResource(R.drawable.log_out); 
     } 
     else 
      loginbuttton.setImageResource(R.drawable.login_with_facebook); 
    } 

    ImageView.OnClickListener btnClick=new ImageView.OnClickListener() 
    { 



     @SuppressWarnings("deprecation") 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 



      // my code begins here 
      if(fb.isSessionValid()) 
      { 
       //button close our session -log out of facebook 
       Toast.makeText(getActivity(), "Session is valid", Toast.LENGTH_LONG); 
       try{ 
        fb.logout(getActivity()); 
        updateButtonImage(); 
       } 
       catch(MalformedURLException e) 
       { 

       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
      else 
      { 
       //login to facebook 
       fb.authorize(getActivity(),new DialogListener() { 

        @Override 
        public void onFacebookError(FacebookError e) { 
         // TODO Auto-generated method stub 
         Toast.makeText(getActivity(), "fbError",Toast.LENGTH_LONG).show(); 

        } 

        @Override 
        public void onError(DialogError e) { 
         // TODO Auto-generated method stub 
         Toast.makeText(getActivity(), "onError",Toast.LENGTH_LONG).show(); 
        } 

        @Override 
        public void onComplete(Bundle values) { 
         // TODO Auto-generated method stub 
         updateButtonImage(); 
        } 

        @Override 
        public void onCancel() { 
         // TODO Auto-generated method stub 
         Toast.makeText(getActivity(), "oncancel",Toast.LENGTH_LONG).show(); 
        } 
       }); 

      } 

     } 

    }; 

} 

답변

5

  LinearLayout fb = (LinearLayout) layout.findViewById(R.id.fb); 
     fb.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (facebook.getAccessToken() != null) { 

        //user is successfully logged in here,do your desire operation 


       } else { 
        loginToFacebook(); 

       } 
      } 
     }); 


    public void loginToFacebook() { 

    mPrefs = getPreferences(MODE_PRIVATE); 
    String access_token = mPrefs.getString("access_token", null); 
    long expires = mPrefs.getLong("access_expires", 0); 

    if (access_token != null) { 
     facebook.setAccessToken(access_token); 

     Log.d("FB Sessions", "" + facebook.isSessionValid()); 
    } 

    if (expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 

    if (!facebook.isSessionValid()) { 
     facebook.authorize(this, 
       new String[] { "email", "publish_stream" }, 
       new DialogListener() { 

        @Override 
        public void onCancel() { 
         // Function to handle cancel event 
        } 

        @Override 
        public void onComplete(Bundle values) { 
         // Function to handle complete event 
         // Edit Preferences and update facebook acess_token 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", 
           facebook.getAccessToken()); 
         editor.putLong("access_expires", 
           facebook.getAccessExpires()); 
         editor.commit(); 
         Toast.makeText(c, 
           "Successfully Login", Toast.LENGTH_LONG) 
           .show(); 
         pwindo.dismiss(); 

         // Making Login button invisible 

        } 

        @Override 
        public void onError(DialogError error) { 
         // Function to handle error 

        } 

        @Override 
        public void onFacebookError(FacebookError fberror) { 
         // Function to handle Facebook errors 
         pwindo.dismiss(); 
         Toast.makeText(c, "Facebook Error", 
           Toast.LENGTH_LONG).show(); 
        } 

       }); 
    } 
} 
+0

당신이 mPrefs을 설명해주십시오 수 mPrefs 변수 – VenushkaT

+0

mPrefs을 기쁘게 부분에 기록 sharePreference의 목적은 건너 뛸 값을 키 값 쌍으로 저장합니다. exp editor.putString ("access_token", facebook.getAccessToken()); 여기 키는 –

+0

키를 전달하여 애플리케이션에서 어디에서나 액세스 할 수 있습니다. 코드를 입력하십시오. 매우 감사합니다. – VenushkaT