我创建了一个带有 Facebook登录按钮的片段和一个文本视图,其中显示了用户名和消息。它工作得非常好。我想在导航抽屉中的图像视图和文本视图中实现相同的功能。我尝试使用它,但它无法正常工作。
public class FacebookLogin extends Fragment {
//initialize WebView
private TextView mTextDetails;
private CallbackManager mCallbackManager;
private AccessTokenTracker mTokenTracker;
private ProfileTracker mProfileTracker;
private FacebookCallback<LoginResult> mCallback=new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d("com", "onSuccess");
AccessToken accessToken = loginResult.getAccessToken();
Profile profile = Profile.getCurrentProfile();
displayWelcomeMessage(profile);
}
@Override
public void onCancel() {
Log.d("com", "onCancel");
}
@Override
public void onError(FacebookException error) {
Log.d("com", "onError ");
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCallbackManager=CallbackManager.Factory.create();
setupTokenTracker();
setupProfileTracker();
mTokenTracker.startTracking();
mProfileTracker.startTracking();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.facebook_login, container, false);
}
private void displayWelcomeMessage(Profile profile){
if (profile != null){
mTextDetails.setText(profile.getName());
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
setupTextDetails(view);
setupLoginButton(view);
}
@Override
public void onResume() {
super.onResume();
Profile profile=Profile.getCurrentProfile();
displayWelcomeMessage(profile);
}
@Override
public void onStop(){
super.onStop();
mTokenTracker.stopTracking();
mProfileTracker.stopTracking();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mCallbackManager.onActivityResult(requestCode,resultCode, data);
}
private void setupTextDetails(View view) {
mTextDetails = (TextView) view.findViewById(R.id.text_details);
}
private void setupTokenTracker() {
mTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
Log.d("com", "" + currentAccessToken);
}
};
}
private void setupProfileTracker() {
mProfileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
Log.d("com", "" + currentProfile);
mTextDetails.setText(constructWelcomeMessage(currentProfile));
}
};
}
private void setupLoginButton(View view) {
LoginButton mButtonLogin = (LoginButton) view.findViewById(R.id.login_button);
mButtonLogin.setFragment(this);
mButtonLogin.setReadPermissions("user_friends");
mButtonLogin.registerCallback(mCallbackManager, mCallback);
}
private String constructWelcomeMessage(Profile profile) {
StringBuffer stringBuffer = new StringBuffer();
if (profile != null) {
stringBuffer.append("Welcome " + profile.getName());
}
return stringBuffer.toString();
}
}
答案 0 :(得分:0)
只需使用fbId获取用户的个人资料照片。
尝试这个...
String fbImg = "http://graph.facebook.com/"+fbId+"/picture?type=large";
现在你可以使用这个&#39; fbImg&#39;字符串加载配置文件pic。
public static Bitmap getFacebookProfilePicture(String userID) throws IOException {
URL imageURL = new URL(fbImg);
Bitmap bitmap = BitmapFactory.decodeStream(imageURL.openConnection().getInputStream());
return bitmap;
}
在imageview上设置位图
try {
Bitmap mBitmap = getFacebookProfilePicture(id);
imageView.setImageBitmap(mBitmap);
} catch (IOException e) {
e.printStackTrace();
}
类似问题......
修改强>
在gradle中添加此行
compile 'com.facebook.android:facebook-android-sdk:4.+'
和你的Java类就像......
public class MainActivity extends AppCompatActivity {
CallbackManager callbackManager;
Button loginfb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_main);
loginfb = (Button) findViewById(R.id.loginfb);
loginfb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "email", "user_birthday", "user_friends", "user_photos", "user_friends"));
}
});
// Generate HasKey & Add this HashKey in Your Developer Account
//getHashkey();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>()
{
@Override
public void onSuccess(LoginResult loginResult)
{
// App code
Log.d("", "onSuccess: " + loginResult.getRecentlyGrantedPermissions());
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback()
{
@Override
public void onCompleted(JSONObject object, GraphResponse response)
{
Log.v("LoginActivity", response.toString());
// Application code
try
{
String id = object.getString("id");
String email = object.getString("email");
Log.d("", "email: " + email);
}
catch (JSONException e)
{
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,link,picture,friends");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel()
{
// App code
}
@Override
public void onError(FacebookException exception)
{
// App code
Log.d("", "onError: "+exception);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
public void getHashkey()
{
PackageInfo info;
try
{
info = getPackageManager().getPackageInfo("YOU PACKAGE NAME", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures)
{
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.e("hash key", something);
}
}
catch (PackageManager.NameNotFoundException e1)
{
Log.e("name not found", e1.toString());
}
catch (NoSuchAlgorithmException e)
{
Log.e("no such an algorithm", e.toString());
}
catch (Exception e)
{
Log.e("exception", e.toString());
}
}
}