2013-05-12 89 views
8

我在我的项目中使用了com.actionbarsherlock.app.SherlockActivity。当我尝试开始另一项活动时,我需要进行Google+登录,则会发生此错误。我在实际设备上收到此错误,而不是仿真器。你觉得我做错了什么?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); 
} 
} 

SignInActivity.java

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需要? https://developers.google.com/+/mobile/android/getting-started

C:\repos>c:\java\jdk1.6.0_34\bin\keytool.exe -exportcert -alias androiddebugkey -keystore agoyal-release-key.keystore -list -v 
Enter keystore password: 
keytool error: java.lang.Exception: Alias <androiddebugkey> does not exist 
    java.lang.Exception: Alias <androiddebugkey> does not exist 
    at sun.security.tools.KeyTool.doPrintEntry(KeyTool.java:1339) 
    at sun.security.tools.KeyTool.doCommands(KeyTool.java:869) 
    at sun.security.tools.KeyTool.run(KeyTool.java:172) 
    at sun.security.tools.KeyTool.main(KeyTool.java:166) 
+1

**“我在做什么错了?”**那么你做错的第一件事就是你没有向我们展示你的所有代码。问题出在'com.google.android.gms.plus.activity.AccountSignUpActivity'上。假设你试图从你的'SignInActivity'开始,那么你只会显示'/ * code * /'。 – Squonk 2013-05-12 23:31:58

+0

Squonk:我已经共享了SignInActivity.java中的所有代码 – AG1 2013-05-12 23:54:19

+0

从logcat中,我同意@Squonk,有一些代码丢失! – thiagolr 2013-05-29 02:23:12

回答

1

的keytool命令,如果你使用自己的释放键,别名应该使用一个密钥,而不是“androiddebugkey”。

+0

感谢为此 - 我不知道为什么谷歌不澄清,在他们的文档... – bkurzius 2014-02-04 00:09:40

0

东西不对,你确定这是正确的logcat输出吗?

用你的代码,你应该得到android.app.SuperNotCalledException: Activity {LandingActivity} did not call through to super.onCreate()异常,而不是你显示的错误。

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