Android 谷歌+;登录:活动赢得';开始

Android 谷歌+;登录:活动赢得';开始,android,android-activity,actionbarsherlock,google-plus,Android,Android Activity,Actionbarsherlock,Google Plus,我在项目中使用com.actionbarsherlock.app.SherlockActivity。当我尝试启动另一个需要进行Google+登录的活动时,会发生此错误。我在实际的设备上,而不是在模拟器上得到这个错误。你认为我做错了什么 错误 05-12 15:58:12.487: E/AndroidRuntime(24310): FATAL EXCEPTION: main 05-12 15:58:12.487: E/AndroidRuntime(24310): java.lang.Runtime

我在项目中使用com.actionbarsherlock.app.SherlockActivity。当我尝试启动另一个需要进行Google+登录的活动时,会发生此错误。我在实际的设备上,而不是在模拟器上得到这个错误。你认为我做错了什么

错误

05-12 15:58:12.487: E/AndroidRuntime(24310): FATAL EXCEPTION: main
05-12 15:58:12.487: E/AndroidRuntime(24310): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.gms/com.google.android.gms.plus.activity.AccountSignUpActivity}: java.lang.SecurityException: Must be started via startActivityForResult
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.os.Looper.loop(Looper.java:137)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at java.lang.reflect.Method.invokeNative(Native Method)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at java.lang.reflect.Method.invoke(Method.java:511)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at dalvik.system.NativeStart.main(Native Method)
05-12 15:58:12.487: E/AndroidRuntime(24310): Caused by: java.lang.SecurityException: Must be started via startActivityForResult
05-12 15:58:12.487: E/AndroidRuntime(24310):    at com.google.android.gms.plus.activity.AccountSignUpActivity.onCreate(AccountSignUpActivity.java:119)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.Activity.performCreate(Activity.java:5104)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-12 15:58:12.487: E/AndroidRuntime(24310):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
05-12 15:58:12.487: E/AndroidRuntime(24310):    ... 11 more
LandingActivity.java

public class LandingActivity extends SherlockActivity {
 @Override
 public void onCreate(Bundle savedInstanceState) {
   Intent i = new Intent(getApplicationContext(), SignInActivity.class);
   this.startActivityForResult(i, 1);
 }
}
import com.actionbarsherlock.app.SherlockActivity;
import android.view.View;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
//import com.google.android.gms.common.*;
//import com.google.android.gms.common.GooglePlayServicesClient.*;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.plus.PlusClient;


/**
 * Example of signing in a user with Google+, and how to make a call to a Google+ API endpoint.
 */
public class SignInActivity extends SherlockActivity
implements View.OnClickListener, ConnectionCallbacks, OnConnectionFailedListener
{
    private static final String TAG = "ExampleActivity";
    private static final int REQUEST_CODE_RESOLVE_ERR = 9000;

    private ProgressDialog mConnectionProgressDialog;
    private PlusClient mPlusClient;
    private ConnectionResult mConnectionResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sign_in_activity);
        findViewById(R.id.sign_in_button_dude).setOnClickListener(this);

        mPlusClient = new PlusClient.Builder(this, this, this).build();
        //.setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity")
        // Progress bar to be displayed if the connection failure is not resolved.
        mConnectionProgressDialog = new ProgressDialog(this);
        mConnectionProgressDialog.setMessage("Signing in...");
    }

    @Override
    protected void onStart() {
        super.onStart();
        mPlusClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mPlusClient.disconnect();
    }

    public void onConnectionFailed(ConnectionResult result) {
        if (result.hasResolution()) {
            try {
                result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
            } catch (SendIntentException e) {
                mPlusClient.connect();
            }
        }
        // Save the result and resolve the connection failure upon a user click.
        mConnectionResult = result;
    }

    @Override
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
        if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
            mConnectionResult = null;
            mPlusClient.connect();
        }
    }

    public void onConnected() {
        String accountName = mPlusClient.getAccountName();
        //mConnectionProgressDialog.dismiss(); //https://developers.google.com/+/mobile/android/sign-in
        Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG).show();
        //Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show();
    }

    public void onDisconnected() {
        Log.d(TAG, "disconnected");
    }

    public void onClick(View view) {
        if (view.getId() == R.id.sign_in_button_dude && !mPlusClient.isConnected()) {
            if (mConnectionResult == null) {
                mConnectionProgressDialog.show();
            } else {
                try {
                    mConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
                } catch (SendIntentException e) {
                    // Try connecting again.
                    mConnectionResult = null;
                    mPlusClient.connect();
                }
            }
        }
    }
}
signianctivity.java

public class LandingActivity extends SherlockActivity {
 @Override
 public void onCreate(Bundle savedInstanceState) {
   Intent i = new Intent(getApplicationContext(), SignInActivity.class);
   this.startActivityForResult(i, 1);
 }
}
import com.actionbarsherlock.app.SherlockActivity;
import android.view.View;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
//import com.google.android.gms.common.*;
//import com.google.android.gms.common.GooglePlayServicesClient.*;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.plus.PlusClient;


/**
 * Example of signing in a user with Google+, and how to make a call to a Google+ API endpoint.
 */
public class SignInActivity extends SherlockActivity
implements View.OnClickListener, ConnectionCallbacks, OnConnectionFailedListener
{
    private static final String TAG = "ExampleActivity";
    private static final int REQUEST_CODE_RESOLVE_ERR = 9000;

    private ProgressDialog mConnectionProgressDialog;
    private PlusClient mPlusClient;
    private ConnectionResult mConnectionResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sign_in_activity);
        findViewById(R.id.sign_in_button_dude).setOnClickListener(this);

        mPlusClient = new PlusClient.Builder(this, this, this).build();
        //.setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity")
        // Progress bar to be displayed if the connection failure is not resolved.
        mConnectionProgressDialog = new ProgressDialog(this);
        mConnectionProgressDialog.setMessage("Signing in...");
    }

    @Override
    protected void onStart() {
        super.onStart();
        mPlusClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mPlusClient.disconnect();
    }

    public void onConnectionFailed(ConnectionResult result) {
        if (result.hasResolution()) {
            try {
                result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
            } catch (SendIntentException e) {
                mPlusClient.connect();
            }
        }
        // Save the result and resolve the connection failure upon a user click.
        mConnectionResult = result;
    }

    @Override
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
        if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
            mConnectionResult = null;
            mPlusClient.connect();
        }
    }

    public void onConnected() {
        String accountName = mPlusClient.getAccountName();
        //mConnectionProgressDialog.dismiss(); //https://developers.google.com/+/mobile/android/sign-in
        Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG).show();
        //Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show();
    }

    public void onDisconnected() {
        Log.d(TAG, "disconnected");
    }

    public void onClick(View view) {
        if (view.getId() == R.id.sign_in_button_dude && !mPlusClient.isConnected()) {
            if (mConnectionResult == null) {
                mConnectionProgressDialog.show();
            } else {
                try {
                    mConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
                } catch (SendIntentException e) {
                    // Try connecting again.
                    mConnectionResult = null;
                    mPlusClient.connect();
                }
            }
        }
    }
}
我也尝试过使用“setScopes(Scopes.PLUS_LOGIN)”,但遇到了同样的问题

import com.google.android.gms.common.Scopes;
// in onCreate()
mPlusClient = new PlusClient.Builder(this, this, this).setScopes(Scopes.PLUS_LOGIN).build();
我也试着启动keytool。。。。是否需要androiddebugkey

C:\repos>C:\java\jdk1.6.0\u 34\bin\keytool.exe-exportcert-alias androiddebugkey-keystore agoyal-release-key.keystore-list-v
输入密钥库密码:
keytool错误:java.lang.Exception:别名不存在
java.lang.Exception:别名不存在
位于sun.security.tools.KeyTool.doPrintEntry(KeyTool.java:1339)
位于sun.security.tools.KeyTool.doCommands(KeyTool.java:869)
运行(KeyTool.java:172)
位于sun.security.tools.KeyTool.main(KeyTool.java:166)

对于keytool命令,如果您使用自己的释放密钥,别名应该是您使用的密钥,而不是“androiddebugkey”。

有些不正确,您确定这是正确的logcat输出吗

使用代码,您应该得到
android.app.SuperNotCalledException:Activity{LandingActivity}没有调用super.onCreate()
异常,而不是显示的错误


另外,
SignInActivity
中的
public onConnected()
方法的签名不正确。正确的应该是
public-onConnected(Bundle-connectionHint)
。很可能您的应用程序未正确编译。

“我做错了什么?”您做错的第一件事是没有向我们显示所有代码。问题在于
com.google.android.gms.plus.activity.AccountSignUpActivity
。假设您试图从您的
SignInActivity
开始,那么您只显示
/*code*/
是没有帮助的。Squonk:我已经从日志猫中共享了SignInActivity.java中的所有代码,我同意@Squonk,缺少一些代码!谢谢你——我不知道谷歌为什么不在他们的文档中澄清这一点。。。