2013-05-12 223 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)。這很可能是您的應用程序編譯不正確。