Google+ 登录在 Android 片段上无法正常工作

2024-04-01

我正在使用 google+ 登录我的应用程序,当我使用活动完成它的工作魅力之后,我将代码移动到片段中,之后当我尝试登录 google+ 时,它不起作用,我必须打开片段活动2 次登录 google+ 谁能告诉我发生了什么代码片段添加在下面

public class GooglePluseFragment extends Fragment implements
        ConnectionCallbacks, OnConnectionFailedListener {

private static final int RC_SIGN_IN = 0;

private static final String TAG = "MainActivity";

private static final int PROFILE_PIC_SIZE = 800;

private GoogleApiClient mGoogleApiClient;

private boolean mIntentInProgress;

private boolean mSignInClicked;

private ConnectionResult mConnectionResult;

private SignInButton btnSignIn;
private Button btnSignOut;

private Context mContext;
private Activity mActivity;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mActivity = getActivity();
    mContext = getActivity().getApplicationContext();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.compund_google_pluse_fragment,
            container, false);

    btnSignIn = (SignInButton) view.findViewById(R.id.btn_sign_in);
    btnSignOut = (Button) view.findViewById(R.id.btn_sign_out);

    sharedPref = view.getContext().getSharedPreferences(
            Constantz.SHEARED_PREFEREANCE, Context.MODE_PRIVATE);

    mGoogleApiClient = new GoogleApiClient.Builder(view.getContext())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).addApi(Plus.API, null)
            .addScope(Plus.SCOPE_PLUS_LOGIN).build();

    btnSignIn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            signInWithGplus();

        }
    });

    btnSignOut.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            signOutFromGplus();
        }
    });

    return view;
}

@Override
public void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
public void onStop() {
    super.onStop();
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

@Override
public void onActivityResult(int requestCode, int responseCode,
        Intent intent) {

    if (requestCode == RC_SIGN_IN) {
        if (responseCode != Activity.RESULT_OK) {
            mSignInClicked = false;
        }

        mIntentInProgress = false;

        if (!mGoogleApiClient.isConnecting()) {
            mGoogleApiClient.connect();

        }
    }
}

@Override
public void onConnectionFailed(ConnectionResult result) {
    if (!result.hasResolution()) {
        GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(),
                mActivity, 0).show();
        Log.e(TAG, "" + result.getErrorCode());
        return;
    }

    if (!mIntentInProgress) {

        mConnectionResult = result;

        if (mSignInClicked) {

            Log.e(TAG, "" + result.getErrorCode());
            resolveSignInError();
        }
    }

}

@Override
public void onConnected(Bundle arg0) {
    mSignInClicked = false;

    getProfileInformation();

    updateUI(true);

}

@Override
public void onConnectionSuspended(int arg0) {
    mGoogleApiClient.connect();
    updateUI(false);

}

private void updateUI(boolean isSignedIn) {
    if (isSignedIn) {
        btnSignIn.setVisibility(View.GONE);
        btnSignOut.setVisibility(View.VISIBLE);

    } else {
        btnSignIn.setVisibility(View.VISIBLE);
        btnSignOut.setVisibility(View.GONE);

    }
}

/**
 * Sign-in into google
 * */
private void signInWithGplus() {
    if (!mGoogleApiClient.isConnecting()) {
        mSignInClicked = true;
        resolveSignInError();
    }
}

/**
 * Method to resolve any signin errors
 * */
private void resolveSignInError() {
    if (mConnectionResult.hasResolution()) {
        try {
            mIntentInProgress = true;
            mConnectionResult.startResolutionForResult(mActivity,
                    RC_SIGN_IN);
        } catch (SendIntentException e) {
            mIntentInProgress = false;
            mGoogleApiClient.connect();
        }
    }
}

/**
 * Fetching user's information name, email, profile pic
 * */
private void getProfileInformation() {
    try {
        if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
            Person currentPerson = Plus.PeopleApi
                    .getCurrentPerson(mGoogleApiClient);
            String personName = currentPerson.getDisplayName();
            String personPhotoUrl = currentPerson.getImage().getUrl();
            String personGooglePlusProfile = currentPerson.getUrl();
            String email = Plus.AccountApi.getAccountName(mGoogleApiClient);

            Log.e(TAG, "Name: " + personName + ", plusProfile: "
                    + personGooglePlusProfile + ", email: " + email
                    + ", Image: " + personPhotoUrl + " user id:"
                    + currentPerson.getId());






        } else {
            Toast.makeText(mContext, "Person information is null",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Sign-out from google
 * */
private void signOutFromGplus() {
    if (mGoogleApiClient.isConnected()) {
        Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
        mGoogleApiClient.disconnect();
        mGoogleApiClient.connect();

        updateUI(false);

    }
}

}

这就是我在片段活动中添加framgent的方式

pluseFragment = new GooglePluseFragment();

        FragmentManager manager = getSupportFragmentManager();

        FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.pluse_frame_layout, pluseFragment);
transaction.commit();

有人可以告诉我我做错了什么吗?为什么我必须打开活动两次才能登录谢谢


终于找到了答案,问题是当片段中的结果活动调用被父活动捕获时,因此您必须手动将结果重定向到片段。只需在您的父片段活动中添加这一行

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == GooglePluseFragment.RC_SIGN_IN) {
            GooglePluseFragment fragment = (GooglePluseFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.pluse_frame_layout);
            fragment.onActivityResult(requestCode, resultCode, data);
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    } 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google+ 登录在 Android 片段上无法正常工作 的相关文章

  • Espresso - 检查使用按钮按下意图打开哪个活动?

    是否可以跟踪按下某个按钮后打开了哪个 Activity 我有一个测试 其中当单击 按下按钮时 it 向服务器发送请求 直到发送请求时 它打开一个活动 验证是否执行成功在测试中 我需要检查打开的 Activity 是什么 我的测试示例 检查
  • ACTION_VIEW 的 Intent.createChooser 仅显示默认浏览器

    我正在尝试使用 Intent createChooser 显示应用程序选择器对话框 该对话框将列出用户手机中所有可用的网络浏览器 我正在使用下面的代码 Intent browserIntent new Intent Intent ACTIO
  • Android - 如何访问 onResume 中 onCreate 中实例化的 View 对象?

    In my onCreate 方法 我正在实例化一个ImageButton View public void onCreate Bundle savedInstanceState super onCreate savedInstanceSt
  • 在 Android 中的活动、服务和应用程序之间传递变量

    有人可以给我提供以下活动 服务 应用程序组合的示例吗 我拥有这三个 但我已经把我的应用程序弄得一团糟 试图在这个地方传递一堆变量 现在我不知道发生了什么 请注意 我是 Android 新手 最近我一直在努力解决这个问题 因为有很多方法可以实
  • 将标题设置为操作栏时出现空指针异常

    Error Caused by java lang NullPointerException Attempt to invoke virtual method void android app ActionBar setTitle java
  • 6:需要显示BuyFlow UI

    There is a problem when i am click on payWithGoogle Button I am implementing Google Pay in my Android Application and wh
  • 如何检测 Google Play 上是否有我的应用程序的更新? [复制]

    这个问题在这里已经有答案了 有没有办法以编程方式检查 Google Play 上我的应用程序是否有更新 以便通知用户 我知道 android google play 有自动通知 但我想使用我自己的通知 弹出消息来更新可用性 有点像 Vibe
  • Cordova 地理定位不适用于 Android

    我想在 Android 上使用地理定位 我用 Apache Cordova 编写应用程序 地理定位在 android 电脑模拟器和 android 手机上均不起作用 I try http cordova apache org docs en
  • Android 在启动时启动服务,如何在设备重启后重新启动服务类?

    我需要在启动时启动一项服务 我搜索了很多 他们正在谈论广播接收器 由于我是 Android 开发新手 所以我对 Android 上的服务并没有清楚的了解 请提供一些源代码 您的接收者 public class MyReceiver exte
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 有没有办法在Android上创建一个三角形按钮?

    有没有办法创建一个三角形的按钮 我知道我可以将三角形图像作为背景 但这将使三角形之外的区域可单击 有没有办法固定按钮角 X 和 Y 以便我可以将其变成三角形 您可以覆盖OnTouch http developer android com r
  • 更改android中禁用按钮的颜色

    有没有办法通过样式或其他形式更改 android 中禁用按钮的颜色 我目前有以下内容 可绘制 button default xml
  • 如何在android中录制音频时暂停背景音乐

    我正在 Android 中开发一个音频记录应用程序 因此 如果设备音乐播放器中已播放任何背景音乐 则应在开始录制之前暂停该背景音乐 并且每当录制停止或暂停时 背景音乐都应恢复 播放录制的音频时也应该如此 有人可以帮我解决这个问题吗 提前致谢
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • ormlite 将日期读取为 'yyyy-MM-dd'

    我需要读取给我的 sqlite 数据库 因此我无法更改表中的日期格式 yyyy MM dd 当我尝试使用 ormlite 为我生成对象时 使用以下注释 DatabaseField columnName REVISION DATE dataT
  • 使用支持库中的 BottomSheet 时如何调暗背景?

    怎样才能让背景像显示的那样变暗here https material design storage googleapis com publish material v 8 material ext publish 0Bzhp5Z4wHba3
  • Android:获取最新意图

    如何获取发送到活动的最后一个意图 的文档onNewIntent 建议我需要做这样的事情 class MyActivity public void onNewIntent Intent intent setIntent intent reac
  • 绘制大位图时 nSyncAndDrawFrame 速度极慢

    我想用多个大位图优化视差滚动视图 在我的 Nexus 5 上 一切都很顺利 Traceview 转储如下所示 doFrame 方法大约需要 18 毫秒才能完成 但是 当使用我的 Nexus 7 或 Android 6 模拟器 Genymot

随机推荐

  • 为像素分配负值

    使用某些标准 图像中有一些我不感兴趣的像素 所以 我想忽略它们 我只是想问一下我所遵循的方法是否可以接受 我已为这些像素分配了负值 这样可以接受吗 当像素具有负值时意味着什么 它会在图像上有一些表现吗 如果您的数据类型允许 例如有符号整数
  • 如何判断无扩展名图像是 png 还是 jpeg

    不久前 我保存了一些由网络服务生成的图像 因此文件名例如 ysauyft87ggsa67fgeg w 1600 我可以打开并操作这些图像 好的 我只想知道它们是什么编码 几乎可以肯定是 png 或 jpeg 我已经在 OSX 中尝试过 获取
  • Chrome 在来自第 3 方 IFRAME 时不会保留我的 _SESSION 变量,但在直接访问时可以完美运行

    直到几周后 我所有的网站都运行良好 我编写代码并在 CodeCanyon 上出售 但最近 今天 我注意到我无法再登录我在那里出售的 PHP 小代码片段 如果我直接在我的域上工作 就像在 URL 栏中输入链接一样 那么在任何浏览器中一切都会完
  • 在Python中使用numpy和scipy在matplotlib中制作分箱箱线图

    我有一个包含值对的二维数组 我想通过 x 值的不同箱来绘制 y 值的箱线图 IE 如果数组是 my array array 1 40 5 4 5 60 然后我想对 my array 0 进行分箱 然后对于每个分箱 生成属于每个框中的相应 m
  • 语法错误:WITH 在此位置输入无效

    所以我有这个类似的请求 WITH customers in usa AS SELECT customerName state FROM customers WHERE country USA SELECT customerName FROM
  • 查找字符串中重复的单词并计算重复次数

    我需要找到字符串上重复的单词 然后计算它们重复的次数 基本上 如果输入字符串是这样的 String s House House House Dog Dog Dog Dog 我需要创建一个不重复的新字符串列表 并将每个单词的重复次数保存在其他
  • 更改 viewpager 中当前片段的背景图像

    我在 viewpager 中有 4 个片段 FragmentStatePagerAdapter 在我的 viewpager 所在的活动中 FragmentStatePagerAdapter 的 newInstance 方法将布局 id 作为
  • Quarkus & Microprofile:是否有更好的方法将 application.properties 中的属性使用到 @ClientHeaderParam 中?

    我正在尝试构建一个简单的应用程序来调用 APIquarkus rest client 我必须注入一个 API 密钥作为标头 该标头对于 API 的所有资源都是相同的 所以我想把这个API Key的值 这取决于环境 dev qa prod 在
  • 将焦点设置回文本框

    在用户移动到用户表单上的下一个字段之前 我需要检查文本框是否为空 空或空白 这是检查文本框是否为空 null 空白的代码 我的问题是它不会将焦点返回到文本框 而是移动到用户表单中的下一个字段 Private Sub txtTDYLocati
  • 3 层模式与 MVVM 的比较

    我不知道MVVM 我总是遵循 3 层模式 其中一层是 UI 另一层是业务层 最后一层是数据访问层 在这一层中 我们将请求从 UI 发送到业务层 业务层与数据访问层进行交互 在这种模式下 一切都很顺利 那么我的问题是为什么要学习 MVVM M
  • 取消引用后 *p++ 会递增吗? [复制]

    这个问题在这里已经有答案了 我不太确定这里的顺序是什么 是吗 1 增加指针p的值后取消引用它 2 在增加指针 p 的值之前先取消引用它 增量和取消引用之间没有顺序 但是 那 运算符应用于结果p 这是原始值p在增量之前
  • 仅在平板电脑上支持 Android N+ 分屏

    有没有办法仅在足够大的屏幕上配置对活动的多窗口支持 例如药片 https developer android com preview features multi window html configuring https develope
  • SQL Server INNER JOIN 具有多个关系的多个内连接

    我有以下查询 它工作得很好 但我需要从另一个名为 FB 的表中提取 BUserName 该表具有与 FU 表中的 UserID 相关的 UserID 字段 这可能吗 SELECT TOP 100 FF XID FF YID FF Title
  • MvcSiteMap 生成菜单而不弄乱面包屑

    我正在配置我的 asp net mvc 5 应用程序以使用 MvcSiteMap 库 到目前为止 我可以成功配置面包屑 然而 菜单模板比面包屑要复杂得多 我有小胡子版本的菜单 我没有显示 ul 标签
  • .h 文件中应包含哪些内容?

    将代码分成多个文件时 究竟应该将哪些内容放入 h文件以及应该放入的内容 cpp file 头文件 h 旨在提供多个文件中所需的信息 类声明 函数原型和枚举等内容通常位于头文件中 一句话 定义 代码文件 cpp 旨在提供只需要在一个文件中了解
  • Gradle - FatJar - 无法找到或加载主类

    我知道这个问题被问了很多并且有很多答案 但我仍然明白 但我不明白为什么 我正在尝试生成一个 jar来自与 gradle 具有依赖关系的项目 我有课src main java Launcher java 其中我有我的main method 有
  • python 中是否可以从子线程中杀死父线程?

    我在 Windows 上使用 Python 3 5 2 我想运行一个 python 脚本 但保证它不会花费超过N秒 如果它does采取超过N秒 应该引发异常 并且程序应该退出 最初我以为我可以在开始时启动一个线程来等待N抛出异常之前的秒数
  • 如何从角度4中的url获取参数?

    我正在尝试从 URL 获取开始日期 网址看起来像http sitename booking startdate 28 08 2017 我的代码如下 aap module ts import NgModule declarations App
  • Maven 无法找到 AEM 原型

    我已经开始解决这个问题很长时间了 我正在处理 Adob e wknd 项目 但我无法通过这个命令 并且大部分工作都是基于它构建的 mvn archetype generate DarchetypeGroupId com adobe gran
  • Google+ 登录在 Android 片段上无法正常工作

    我正在使用 google 登录我的应用程序 当我使用活动完成它的工作魅力之后 我将代码移动到片段中 之后当我尝试登录 google 时 它不起作用 我必须打开片段活动2 次登录 google 谁能告诉我发生了什么代码片段添加在下面 publ