Facebook的个人资料图片在ImageView里面导航抽屉

时间:2017-03-15 12:07:59

标签: android android-studio facebook-graph-api

我创建了一个带有 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();
}

}

1 个答案:

答案 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();
        }

类似问题......

example:1
example:2
example:3

修改

在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());
        }
    }

}