2014-05-07 34 views
2

我創建一個使用Facebook的SDK的Android應用程序,它工作正常的登錄片段,我要求這樣的權限:如何設置活動登錄Facebook的權限

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_login_activity2, container, false); 

    LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); 
    authButton.setFragment(this); 
    authButton.setReadPermissions(Arrays.asList("user_about_me","user_likes", "user_status","email","user_relationships")); 

現在我需要做同樣的事情,但Facebook的登錄需要在一個活動,所以以前的代碼將無法正常工作,因爲"authButton.setFragment(this);"需要我沒有的片段。

另外,如果我不使用"authButton.setFragment(this);"我不能設置權限,因爲"authButton.setReadPermissions"會產生nullPointerException

那麼什麼,我問的是如何將我的權限傳遞給Facebook登錄我的活動

+0

你可以發佈來自nullPointerException的堆棧跟蹤嗎?如果您將LoginButton添加到活動中,則不需要執行任何操作。 –

回答

0

讓你活動方式如下,無需設置authButton.setFragment(this)

package com.example.integration;

import java.util.Arrays; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.model.GraphUser; 
import com.facebook.widget.LoginButton; 

public class MainActivity extends Activity { 

    private LoginButton fbLoginBtn; 

    private SharedPreferences mPrefs; 

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

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     fbLoginBtn = (LoginButton) findViewById(R.id.fb_login_button); 
     fbLoginBtn.setReadPermissions(Arrays.asList("email")); 

     mPrefs = getPreferences(MODE_PRIVATE); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Session session = Session.getActiveSession(); 
     if (session != null && 
       (session.isOpened() || session.isClosed())) { 
      onSessionStateChange(session, session.getState(), null); 
     } 

    } 

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

     if (state.isOpened()) { 
      Editor edit = mPrefs.edit(); 
      edit.putString("access_token", session.getAccessToken()); 
      edit.putString("expires", session.getExpirationDate() + ""); 
      edit.commit(); 
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 

        if (user != null) { 
         String firstName = user.getFirstName(); 
         String lastName = user.getLastName(); 
         String id = user.getId(); 
         String email = (String) user.asMap().get("email"); 

         Log.i("facebookid", id); 
         Log.i("firstName", firstName); 
         Log.i("lastName", lastName); 
         Log.i("AccessToken", session.getAccessToken()); 
         Log.i("Email", email); 

         Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
         intent.putExtra("name", firstName); 
         startActivity(intent); 
        } 
       } 

      }); 

     } 

     else if (state.isClosed()) { 
      Toast.makeText(this, "Please Login", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(MainActivity.this, requestCode, resultCode, data); 
    } 
}