Android 谷歌+;登录:活动赢得';开始
我在项目中使用com.actionbarsherlock.app.SherlockActivity。当我尝试启动另一个需要进行Google+登录的活动时,会发生此错误。我在实际的设备上,而不是在模拟器上得到这个错误。你认为我做错了什么 错误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
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,缺少一些代码!谢谢你——我不知道谷歌为什么不在他们的文档中澄清这一点。。。