2016-01-21 58 views
-1

我想在我的Android应用程序中集成谷歌加,但它显示运行时错误。整合谷歌加运行时错误

借助此链接帮助: https://developers.google.com/+/mobile/android/sign-in

完整的logcat

01-21 13:08:22.097: W/SignInButton(1171): Sign in button not found, using placeholder instead 
    01-21 13:08:22.267: D/AndroidRuntime(1171): Shutting down VM 
    01-21 13:08:22.267: W/dalvikvm(1171): threadid=1: thread exiting with uncaught exception (group=0xb3a7cba8) 
    01-21 13:08:22.387: D/dalvikvm(1171): GC_FOR_ALLOC freed 100K, 6% free 3189K/3368K, paused 90ms, total 93ms 
    01-21 13:08:22.387: E/AndroidRuntime(1171): FATAL EXCEPTION: main 
    01-21 13:08:22.387: E/AndroidRuntime(1171): Process: com.example.googleplus, PID: 1171 
    01-21 13:08:22.387: E/AndroidRuntime(1171): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.googleplus/com.example.googleplus.MainActivity}: java.lang.NullPointerException: Null options are not permitted for this Api 
    01-21 13:08:22.387: E/AndroidRuntime(1171): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
    01-21 13:08:22.387: E/AndroidRuntime(1171): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
    01-21 13:08:22.387: E/AndroidRuntime(1171): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    01-21 13:08:22.387: E/AndroidRuntime(1171): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at android.os.Handler.dispatchMessage(Handler.java:102) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at android.os.Looper.loop(Looper.java:136) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at android.app.ActivityThread.main(ActivityThread.java:5001) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at java.lang.reflect.Method.invokeNative(Native Method) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at java.lang.reflect.Method.invoke(Method.java:515) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
01-21 13:08:22.387: E/AndroidRuntime(1171): at dalvik.system.NativeStart.main(Native Method) 
01-21 13:08:22.387: E/AndroidRuntime(1171): Caused by: java.lang.NullPointerException: Null options are not permitted for this Api 
01-21 13:08:22.387: E/AndroidRuntime(1171):  at com.google.android.gms.common.internal.o.b(Unknown Source) 
01-21 13:08:22.387: E/AndroidRuntime(1171):  at com.google.android.gms.common.api.GoogleApiClient$Builder.addApi(Unknown Source) 
01-21 13:08:22.387: E/AndroidRuntime(1171):  at com.example.googleplus.MainActivity.onCreate(MainActivity.java:58) 
01-21 13:08:22.387: E/AndroidRuntime(1171):  at android.app.Activity.performCreate(Activity.java:5231) 
01-21 13:08:22.387: E/AndroidRuntime(1171):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
01-21 13:08:22.387: E/AndroidRuntime(1171):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
01-21 13:08:22.387: E/AndroidRuntime(1171):  ... 11 more 
01-21 13:08:26.547: I/Process(1171): Sending signal. PID: 1171 SIG: 9 

主要活动

package com.example.googleplus; 

import java.io.IOException; 
import java.net.URI; 
import java.net.URL; 

import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.IntentSender.SendIntentException; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import  com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks; 
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener; 
import com.google.android.gms.plus.Plus; 
import com.google.android.gms.plus.model.people.Person; 

public class MainActivity extends Activity implements ConnectionCallbacks, 
      OnConnectionFailedListener { 


    private static final int RC_SIGN_IN = 0; 


    private GoogleApiClient mGoogleApiClient; 

    private boolean mIntentInProgress; 
    TextView textView; 
    ImageView profileImage; 
    com.google.android.gms.common.SignInButton signInBtn; 

    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
         .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 

      setContentView(R.layout.activity_main); 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
         .addConnectionCallbacks(this) 
         .addOnConnectionFailedListener(this).addApi(Plus.API, null) 
         .addScope(Plus.SCOPE_PLUS_LOGIN).build(); 

      textView = (TextView) findViewById(R.id.username); 
      profileImage = (ImageView) findViewById(R.id.profileImage); 
      signInBtn = (com.google.android.gms.common.SignInButton) findViewById(R.id.sign_in_button); 
      signInBtn.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
         mGoogleApiClient.connect(); 

       } 
      }); 
    } 

    protected void onStart() { 
      super.onStart(); 

    } 

    protected void onStop() { 
      super.onStop(); 

      if (mGoogleApiClient.isConnected()) { 
       mGoogleApiClient.disconnect(); 
      } 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult arg0) { 

      if (!mIntentInProgress && arg0.hasResolution()) { 
       try { 
         mIntentInProgress = true; 
         arg0.startResolutionForResult(this, RC_SIGN_IN); 
       } catch (SendIntentException e) { 
         // The intent was canceled before it was sent. Return to the 
         // default 
         // state and attempt to connect to get an updated 
         // ConnectionResult. 
         mIntentInProgress = false; 
         mGoogleApiClient.connect(); 
       } 

      } 

      // Log.e("error", "error code" + arg0.getResolution()); 
      Toast.makeText(this, "User is onConnectionFailed!", Toast.LENGTH_LONG) 
         .show(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int responseCode, 
       Intent intent) { 
      if (requestCode == RC_SIGN_IN) { 
       mIntentInProgress = false; 
       if (!mGoogleApiClient.isConnecting()) { 
         mGoogleApiClient.connect(); 
       } 
      } 
    } 

    @Override 
    public void onConnected(Bundle arg0) { 

      Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); 
      signInBtn.setVisibility(View.GONE); 
      if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { 
       Person person = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 
       textView.setText("Welcome : " + person.getDisplayName()); 
       try { 
         JSONObject jsonObject = new JSONObject(person.getImage() 
            .toString()); 
         String imageUrl = jsonObject.getString("url"); 

         try { 
           URL url = new URL(imageUrl); 
           Bitmap bmp; 
           bmp = BitmapFactory.decodeStream(url.openConnection() 
              .getInputStream()); 
           profileImage.setImageBitmap(bmp); 
         } catch (IOException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
         } 

       } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
       } 

      } 

    } 

    @Override 
    public void onConnectionSuspended(int arg0) { 

      Toast.makeText(this, "User is onConnectionSuspended!", 
         Toast.LENGTH_LONG).show(); 
    } 

} 

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="#FFFFFF" 
android:padding="20dip"> 
<com.google.android.gms.common.SignInButton 
    android:id="@+id/sign_in_button" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="30dip" 
    /> 
<TextView 
    android:id="@+id/username" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:textSize="9pt" 
    android:text="" /> 

<ImageView 
    android:id="@+id/profileImage" 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    /> 
</LinearLayout> 
+0

欢迎来到Stack Overflow!请发布完整的例外日志至少 – webo80

+0

@ webo80,这里是我完整的LogCat –

回答

0

正如logcat中所描述的,你需要的广告d a SignInButton。根据你提供的文件,谷歌说:

你应该使用带有Google+标志的红色登录按钮。

Dit你真的在你的活动中添加该按钮?

+0

**是的,我高度添加了红色登录按钮,m也分享了我的应用程序的xml文件,只需检查它** @John Doe –