2017-05-16 8 views
0

Androidスタジオを使用しており、Google APIをログインとして使用したいと考えています。ログインが成功すると、別のアクティビティに変更される可能性があります。それに加えて、私は別のアクティビティにアカウント名とプロフィール画像を表示したいが、私はこのエラーを得た:GoogleApiClient識別子が必要です。Androidスタジオのエラー

error: identifier expected GoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_SIGN_IN_API, gso).build();

マイコード:

package com.example.alif.angkotcoba; 

import android.content.Intent; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 

import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener,GoogleApiClient.OnConnectionFailedListener { 

    private SignInButton SignIn; 
    private GoogleApiClient GoogleApiClient; 
    private static final int RC_SIGN_IN =9001; 
    private static final String TAG ="signInActivity"; 
    GoogleSignInOptions gso=new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .build(); 
    GoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_SIGN_IN_API, gso).build(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     SignIn = (SignInButton) findViewById(R.id.btngoogle); 
     SignIn.setOnClickListener(this); 
    } 

    public void gotoSecondActivity (View view) { 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.btngoogle: 
       signIn(); 
       break; 
     } 
    } 

    public void signIn() 
    { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(GoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 
    public void handleResult (GoogleSignInResult result) { 
     GoogleSignInAccount account = result.getSignInAccount(); 
     String name = account.getDisplayName(); 
     String email = account.getEmail(); 
     String img_url = account.getPhotoUrl().toString(); 
    } 

    @Override 
    public void onActivityResult(int requestcode,int resultcode,Intent data) { 
     super.onActivityResult(requestcode,resultcode,data); 
     if (requestcode==RC_SIGN_IN){ 
      GoogleSignInResult result=Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      handleSignInResult(result); 
     } 
    } 

    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d(TAG,"handleSignInResult:"+ result.isSuccess()); 
     if (result.isSuccess()){ 
      Intent intent = new Intent(this, SecondActivity.class); 
      startActivity(intent); 
     } 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Log.d(TAG,"onConnectionFailed:"+connectionResult); 
    } 
} 

答えて

0

あなたは宣言で変数名を必要とします。問題は、クラスと同じ名前の変数を宣言しようとしていることです。

private GoogleApiClient GoogleApiClient; 

これは動作しません。コンパイラに関する限り、割り当ての左側にあるのはタイプ名GoogleApiClientです。

private GoogleApiClient googleApiClient; // note change of case! 

googleApiClient = ... 

はまた、あなたはおそらく、変数が宣言されたときにthisonCreate内側ではなく、依存するものを初期化したほうが良いです。このような何かを試してみてください。

+0

私は変数を変更しましたが、問題は同じです –

+0

@MRizkiAlifR - 割り当てはどのメソッドの外にあるようです。それはJavaでは違法です。私が提案したように、代入を 'onCreate()'に移しましたか?また、代入文と宣言の変数名を変更しましたか? –

関連する問題