2016-08-21 9 views
0

私は自分の誕生日、メールアドレスなどのGoogleユーザーの詳細を取得しようとしていますアドレス、ニックネームなどが含まれます。デベロッパーコンソールでGoogle+ APIを有効にしました。私はこれを行うコードを実行すると、このエラーでクラッシュ:私は次のフラグメントをロードしようとすると、ヌルオブジェクトリファレンスでインタフェースメソッド 'boolean com.google.android.gms.plus.model.people.Person.hasNickname()'を呼び出そうとしています

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == SIGN_IN_REQUEST) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     GoogleSignInAccount account = result.getSignInAccount(); //Information of account is loaded here 
     account.getId(); 
     final Person[] googlePerson = new Person[1]; 
     Plus.PeopleApi.load(googleApiClient, account.getId()).setResultCallback(new ResultCallback<People.LoadPeopleResult>() { 
      @Override 
      public void onResult(@NonNull People.LoadPeopleResult loadPeopleResult) { 
       googlePerson[0] = loadPeopleResult.getPersonBuffer().get(0); 
      } 
     }); 

     DataContainer.getDataContainerInstance().setGoogleSignInAccount(account); 
     DataContainer.getDataContainerInstance().setGooglePerson(googlePerson[0]); 

     if (account != null) { 
      FragmentManager mgr = getFragmentManager(); 
      FragmentTransaction transaction = mgr.beginTransaction(); 
      transaction.replace(R.id.LoginActivityContentArea, new GoogleSignUpFragment(), "GoogleSignUpFragment"); 
      transaction.addToBackStack("GoogleSignUpFragment"); 
      transaction.commit(); 
     } 

    } 
} 

クラッシュが起こる:ここ

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.google.android.gms.plus.model.people.Person.hasNickname()' on a null object reference 
                    at Fragments.GoogleSignUpFragment.setupPage(GoogleSignUpFragment.java:93) 
                    at Fragments.GoogleSignUpFragment.onCreateView(GoogleSignUpFragment.java:56) 

は、Google +のAPIに接続するコードです。ユーザーはテキストビューに詳細を入力します。

private void setupPage() 
{ 
    GoogleSignInAccount account = DataContainer.getDataContainerInstance().getGoogleSignInAccount(); 
    Person googlePerson = DataContainer.getDataContainerInstance().getGooglePerson(); 
     if (googlePerson.hasNickname()) { 
      username.setText(googlePerson.getNickname()); 
     } 
     dob.setText(googlePerson.getBirthday()); 
     gender.setText(googlePerson.getGender()); 
     location.setText(googlePerson.getCurrentLocation()); 
    name.setText(account.getDisplayName()); 
    email.setText(account.getEmail()); 

} 

メールアカウントにGoogle+プロフィールがない場合、Googleユーザーの生年月日を取得する別の方法はありますか?このメールアカウントにはGoogle+プロフィールがないため、このエラーが発生している可能性があります。

+0

私はこれがGoogle APIの問題ではないと思います。 'DataContainer.getDataContainerInstance().getGooglePerson();'は単にnullを返しました。 –

答えて

0

あなたがこのようなコードを書いたらどうでしょうか?あなたはあなたがnull値を持っていることに驚いていますか? 1つのヌル値を持つ配列を宣言してから、その配列をある程度DataContainerに格納します。 onResultが呼び出された後も

final Person[] googlePerson = new Person[1]; 
DataContainer.getDataContainerInstance().setGoogleSignInAccount(account); 
DataContainer.getDataContainerInstance().setGooglePerson(googlePerson[0]); 

Plus.PeopleApi.load(googleApiClient, account.getId()).setResultCallback(new ResultCallback<People.LoadPeopleResult>() { 
    @Override 
    public void onResult(@NonNull People.LoadPeopleResult loadPeopleResult) { 
     googlePerson[0] = loadPeopleResult.getPersonBuffer().get(0); 
    } 
}); 

、私はそれがDataContainerの内部での参照を更新しないと思います。何が起こっている

は、あなたが次のフラグメントを始めているonResultが後と呼ばれるかもしれないということで、そのためデータはまだありませんが、あなたは先に行くと、とにかくそれにアクセスしよう。しかし、ここで


私はDataContainerが何であるか知らないが、シングルトンインスタンスが行くための貧しい人々の方法のように見えるが、あなたがするようにコードを変更する必要がありますものです。

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == SIGN_IN_REQUEST) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     //Information of account is loaded here 
     final GoogleSignInAccount account = result.getSignInAccount(); 
     int accountId = account.getId(); 

     Plus.PeopleApi.load(googleApiClient, accountId).setResultCallback(new ResultCallback<People.LoadPeopleResult>() { 
      @Override 
      public void onResult(@NonNull People.LoadPeopleResult loadPeopleResult) { 
       Person p = loadPeopleResult.getPersonBuffer().get(0); 
       displayPerson(account, p); 
      } 
     }); 
    } 
} 

public void displayPerson(GoogleSignInAccount account, Person p) { 

    DataContainer.getDataContainerInstance().setGoogleSignInAccount(account); 
    DataContainer.getDataContainerInstance().setGooglePerson(p); 

    if (account != null) { 
     getFragmentManager() 
      .beginTransaction() 
      .replace(R.id.LoginActivityContentArea, new GoogleSignUpFragment(), "GoogleSignUpFragment") 
      .addToBackStack("GoogleSignUpFragment") 
      .commit(); 
    } 

} 
関連する問題

 関連する問題