android - 在 fragment 中集成 google plus api 时出现 ClassCastException

标签 android android-fragments google-plus

我按照 developer.google.com 中提到的所有步骤在我的应用程序中实现了 googleplus api。

我在 fragment 中集成了 googleplus api,运行代码时出现了 ClassCastException。 我的 fragment 类:

 import com.digiapes.apeonomy.animation.Positions;
    import com.example.apeonomy.R;
    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GooglePlayServicesUtil;
    import com.google.android.gms.common.api.GoogleApiClient;
    import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
    import com.google.android.gms.plus.Plus;
   import android.animation.ObjectAnimator;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;


    public class Login extends Fragment implements OnGlobalLayoutListener,
            OnClickListener, GoogleApiClient.ConnectionCallbacks,
            GoogleApiClient.OnConnectionFailedListener {
        EditText UN, Pass;
        View loginimage, loginusing, loginlayout;
        ImageButton flogin, Glogin;
        Button login1;
        float f;
        Positions pos = new Positions();
        String name = "Harsha";
        String pass = "hahaha";
        private static final int RC_SIGNIN = 0;
        private static boolean mSignInClicked;
        private GoogleApiClient mGoogleApiClient;
        private boolean mIntentInProgress;
        private boolean mSignedIn;
        private ConnectionResult mConnectionResult;
        private Activity c;
        private boolean mSignedInClicked;

        // Login_Register Lg=new Login_Register();
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View login = inflater.inflate(R.layout.login, container, false);
            // TODO Auto-generated method stub
            UN = (EditText) login.findViewById(R.id.UsernameL);
            Pass = (EditText) login.findViewById(R.id.PassswordL);
            loginimage = login.findViewById(R.id.LoginImage);
            login1 = (Button) login.findViewById(R.id.Login);
            loginusing = login.findViewById(R.id.loginusing);
            loginlayout = login.findViewById(R.id.LoginLayout);
            f = ((Login_Register) getActivity()).pos.getLIpos();
            loginimage.getViewTreeObserver().addOnGlobalLayoutListener(this);
            UN.getBackground().setAlpha(50);
            Pass.getBackground().setAlpha(50);
            ObjectAnimator.ofFloat(loginusing, View.ALPHA, 0, 1).setDuration(1000)
                    .start();
            ObjectAnimator.ofFloat(loginlayout, View.ALPHA, 0, 1).setDuration(1000)
                    .start();
            login.findViewById(R.id.googlepluslog).setOnClickListener(this);
            login.findViewById(R.id.facebooklog).setOnClickListener(this);

            return login;
        }

        @Override
        public void onGlobalLayout() {
            pos.setLIpos(loginimage.getY());
            // TODO Auto-generated method stub

        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onActivityCreated(savedInstanceState);
            ObjectAnimator
                    .ofFloat(loginimage, View.TRANSLATION_Y,
                            f - loginimage.getY() - 130, 0).setDuration(300)
                    .start();
            login1.setOnClickListener(this);

        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .addConnectionCallbacks((ConnectionCallbacks) getActivity().getApplicationContext())
            .addOnConnectionFailedListener(this).addApi(Plus.API, null)
            .addScope(Plus.SCOPE_PLUS_LOGIN).build();

        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId()) {
            case R.id.Login:
                if (UN.getText().length() == 0 || Pass.getText().length() == 0) {
                    Toast.makeText(getActivity(),
                            "Please enter valid Username and Password",
                            Toast.LENGTH_SHORT).show();
                } else if (UN.getText().toString().equals(name)
                        && Pass.getText().toString().equals(pass)) {

                    Intent intent = new Intent(getActivity()
                            .getApplicationContext(), Main.class);
                    startActivity(intent);
                }
            break;
        case R.id.facebooklog:

            break;
        case R.id.googlepluslog:
            signInWithGplus();
            break;

        }

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if (requestCode == RC_SIGNIN) {
            mIntentInProgress = false;

            if (!mGoogleApiClient.isConnecting()) {
                mGoogleApiClient.connect();
            }
        }
    }
    private void signInWithGplus() {
        // TODO Auto-generated method stub
        if (!mGoogleApiClient.isConnecting()) {
            mSignedIn = true;
            resolveSignInerror();
        }

    }
    private void resolveSignInerror() {
        // TODO Auto-generated method stub
        if (mConnectionResult.hasResolution()) {
            try {
                mIntentInProgress = true;
                mConnectionResult.startResolutionForResult(c, RC_SIGNIN);
            } catch (SendIntentException e) {
                mIntentInProgress = false;
                mGoogleApiClient.connect();
            }
        }
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // TODO Auto-generated method stub
        if (!result.hasResolution()) {
            GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), c, 0)
                    .show();
            return;
        }
        if(!mIntentInProgress){
            mConnectionResult=result;
            if(mSignedInClicked)
                resolveSignInerror();
        }
    }

    @Override
    public void onConnected(Bundle arg0) {
        mSignedInClicked=false;
        Toast.makeText(c, "Connected", Toast.LENGTH_SHORT).show();
        // TODO Auto-generated method stub

    }

    @Override
    public void onConnectionSuspended(int arg0) {
        // TODO Auto-generated method stub
        mGoogleApiClient.connect();

    }
    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        mGoogleApiClient.connect();
    }
    @Override
    public void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        if (mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
    }
}

在这一行出现错误:

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

日志:enter image description here

Error implementing GoogleApiClient Builder for Android development 中给出的解决方案没有为我锻炼...

最佳答案

.addConnectionCallbacks((ConnectionCallbacks) getActivity().getApplicationContext())

这是错误的,该方法接受一个实现 GoogleApiClient.ConnectionCallbacks 的类,使用您的 Fragment 而不是 getActivity().getApplicationContext() .

关于android - 在 fragment 中集成 google plus api 时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25764701/

相关文章:

java - 删除除第一个以外的所有 Activity

android - 静态链接的二进制文件需要共享库 libnss

android-layout - 如何在 bottombar 的片段之一中实现 tabview?

android - 使用 google plus 登录

android - C++ 隐式参数 : this and the returned object, 的顺序哪个先出现?

java.lang.SecurityException : Permission Denial: starting Intent {act=android. settings.USAGE_ACCESS_SETTINGS}

android - 类似滚动效果的 Google+ 个人资料

google-api - 如何获取 Google Plus 中帖子的评论?

java - 禁用在一个滑动选项卡中滑动

android - 当它隐藏在另一个 fragment 中时,以编程方式在 CoordinatorLayout 中显示 BottomNavigationView