android - 使用 Facebook SDK 登录后仅设置一次图像

标签 android image facebook facebook-graph-api set

我可以从 Facebook SDK 访问名称、图像和其他内容。我可以在登录时在 ImageView 中设置图像。然后如果我返回并运行相同的 Activity,则登录为 True 但图像不是在 ImageView 中设置。我必须使用 Shared Pref 来保存图像吗?或者 facebook 通过 Session 提供此功能。我正在使用 Picasso 使用图像缓存,但未设置图像。

  callbackManager = CallbackManager.Factory.create();
        nowLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {


            @Override
            public void onSuccess(LoginResult loginResult) {
                Toast.makeText(HomeStayDetailPage.this, "Success", Toast.LENGTH_SHORT).show();
                AccessToken accessToken = loginResult.getAccessToken();

                GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        try {

                            userID = (String) object.get("id");
                            String userName = (String) object.get("name");
                            Picasso.with(HomeStayDetailPage.this).load("https://graph.facebook.com/" + userID + "/picture?type=large").error(R.mipmap.close_hire_guide).into(facebook_image_loader_imageView);


                            System.out.println("hello userID" + userID);
                            System.out.println("hello userName" + userName);


                            //Bitmap b = (Bitmap) object.get("picture");
//                            tv = (TextView) findViewById(R.id.textView2);
//                            tv.setText("Hello" + " " + userName);
                            Log.d("o/p", "name");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,picture");
                request.setParameters(parameters);
                request.executeAsync();


            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException error) {

            }
        });


   public boolean isLoggedIn() {
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        return accessToken != null;
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

//
//        if (isLoggedIn() == true) {
//            Picasso.with(getApplicationContext()).load("https://graph.facebook.com/" + userID + "/picture?type=large").memoryPolicy(MemoryPolicy.NO_STORE).networkPolicy(NetworkPolicy.OFFLINE).error(R.drawable.close).into(facebook_image_loader_imageView, new Callback() {
//                @Override
//                public void onSuccess() {
//
//                }
//
//                @Override
//                public void onError() {
//                    //Try again online if cache failed
//                    Picasso.with(getApplicationContext())
//                            .load("https://graph.facebook.com/" + userID + "/picture?type=large")
//                            .error(R.drawable.close)
//                            .into(facebook_image_loader_imageView, new Callback() {
//                                @Override
//                                public void onSuccess() {
//
//                                }
//
//                                @Override
//                                public void onError() {
//                                    Log.v("Picasso", "Could not fetch image");
//                                }
//                            });
//                }
//            });
//
//
//        }

为什么当 onBackpressed 和调用相同的 Activity 时我无法在登录后设置图像?

最佳答案

您可以使用共享首选项来存储和访问数据

  try {

                            userID = (String) object.get("id");
                            String userName = (String) object.get("name");
                            Picasso.with(HomeStayDetailPage.this).load("https://graph.facebook.com/" + userID + "/picture?type=large").error(R.mipmap.close_hire_guide).into(facebook_image_loader_imageView);
                            System.out.println("hello userID" + userID);
                            System.out.println("hello userName" + userName);
                            SharedPreferences.Editor editor = getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE).edit();
                            editor.putString("id", userID);
                            editor.commit();


                            //Bitmap b = (Bitmap) object.get("picture");
//                            tv = (TextView) findViewById(R.id.textView2);
//                            tv.setText("Hello" + " " + userName);
                            Log.d("o/p", "name");
                        }

访问 ONcreate 上的信息

如果(isLoggedIn() == 真){

    SharedPreferences prefs = getSharedPreferences("MY_PREFS_NAME", 0);
    String response = prefs.getString("id", userID);

    Toast.makeText(this, response, Toast.LENGTH_SHORT).show();
    System.out.println("htis is response " + response);
    Picasso.with(HomeStayDetailPage.this).load("https://graph.facebook.com/" + response + "/picture?type=large").error(R.mipmap.close_hire_guide).into(facebook_image_loader_imageView);

}

Try this

关于android - 使用 Facebook SDK 登录后仅设置一次图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45930837/

相关文章:

javascript - Ionic3/当连接从离线变为在线时如何让应用程序尝试加载图像?

python - 为给定的索引 python 插值图像

java - 无法正确使用 .setLayoutParams(...) - Android

android - com.android.tools.r8.errors.CompilationError : Program type already present: androidx. annotation.AnimRes

android - 带有 AppCompat 的 ActionMode 无法更改背景和文本颜色

ios - Instagram 分享到 Feed iOS 不起作用 (UIDocumentInteractionController)

facebook - 如何在 Facebook 页面上设计讨论选项卡?

android模拟器sd卡 "your SD card is full"

image - 有没有办法让 Codeigniter Controller 返回图像?

HTML Facebook 之类的按钮破坏了网站的响应能力