gpt4 book ai didi

android - 如何将 LoginResult 从 Facebook 登录传递到 Android 中的 Intent

转载 作者:行者123 更新时间:2023-11-30 01:08:32 25 4
gpt4 key购买 nike

我正在尝试构建一个示例 Android 应用程序,它连接到 Facebook SDK,登录到 facebook 并在我的墙上发布一条消息。

LoginManager.getInstance().logInWithPublishPermissions(MainActivity.this, Arrays.asList("manage_pages,publish_pages"));
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult result) {
serialize_login sl = new serialize_login();
sl.result=result;
Intent myIntent = new Intent(MainActivity.this,PublishMessage.class);
myIntent.putExtra("LoginResult",sl);
startActivity(myIntent);

}

如果登录成功,我想调用另一个负责消息发布的 Activity 。我需要 accessToken 来完成它,我正在尝试将它传递给 Intent。由于 Intent 只接受字符串,因此我构建了一个名为 serialize_login 的可序列化类。在接收端,我这样做

LoginResult lr = (LoginResult)myIntent.getExtras().getSerializable("result");
GraphRequest request = GraphRequest.newPostRequest(lr.getAccessToken(), pageID
, null, new GraphRequest.Callback() {

我得到以下异常。

Caused by: java.io.NotSerializableException: com.facebook.login.LoginResult
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)

有人可以帮忙吗?如果序列化不是正确的做法,我该如何将对象传递给 Intent (字符串除外)

最佳答案

Facebook 的 LoginResult是一个未实现 Serializable 的 Java 对象接口(interface),它也不实现 Parcelable界面。这意味着,您不能通过 Intent 传递它。

我的建议是强调为什么需要将 LoginResult 传递给下一个 Activity ,让我们找到一种无需传递 Intent 即可检索所需信息的更好方法。


但是,如果您执意要这样做,即使我个人不建议您这样做,您也可以这样做:

如果您查看 documentation在此处的 LoginResult 类中,您将看到可以获取 AccessTokenrecentlyGrantedPermissions 以及 recentlyDeniedPermissions

此外,查看 AccessToken 的源代码, 你会看到它实现了 Parcelable ,这意味着您可以通过 intent.putExtra() 传递 AccessToken。这意味着您可以执行以下操作:

intent.putExtra("AccessToken", loginResult.getAccessToken());

其他方法 getRecentlyDeniedPermissions()getRecentlyGrantedPermissions() 各自返回一个 Set包含字符串。

集合本身不能通过 Intent 传递,因为它既没有实现可序列化也没有实现可打包,您可以将其包装在 HashSet 周围(实现可序列化)

intent.putSerializable("RecentlyGrantedPermissions", new HashSet<>(loginResult.getRecentlyGrantedPermissions());

不推荐这样做的原因有两个:

  1. 出于性能原因,您应该始终尽可能尝试传递 Parcelabable 而不是 Serializable。
  2. 这感觉太过分了。很可能有更好的方法来做您想做的事。

关于android - 如何将 LoginResult 从 Facebook 登录传递到 Android 中的 Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com