2017-08-19 2 views
-2

私はGoogleプレイサービスを手動でアップグレードしようとしていますが、常に文が有効になっている場合。 私は2つのデバイスでテストします.1つ目のデバイスでは、Googleのバージョンが10未満のダイアログが正しく表示されますが、Google再生サービスがアップグレードされた2番目のデバイスでは、実行後にアプリケーションがクラッシュします。他になぜAndroid oncreateメソッドでアクティブではないのですか?

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    if (checkPlayServices(ActivityMap.this) == true) { 
     dialog.show(); 
    } else { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 

     shopOnMap(); 

     if (savedInstanceState != null) { 
      mLastKnownLocation = savedInstanceState.getParcelable(KEY_LOCATION); 
      mCameraPosition = savedInstanceState.getParcelable(KEY_CAMERA_POSITION); 
     } 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, 
         this /* OnConnectionFailedListener */) 
       .addConnectionCallbacks(this) 
       .addApi(LocationServices.API) 
       .addApi(Places.GEO_DATA_API) 
       .addApi(Places.PLACE_DETECTION_API) 
       .build(); 
     mGoogleApiClient.connect(); 

    } 
} 


public boolean checkPlayServices(Activity activity) { 
    boolean res= false; 
    GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); 
    int resultCode = apiAvailability.isGooglePlayServicesAvailable(activity); 
    if (resultCode != ConnectionResult.SUCCESS) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(ActivityMap.this); 

     builder.setMessage("Do you want update Google play services?") 
       .setTitle("Google Play Services"); 

     builder.setPositiveButton("ِDownload", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 

       new DownloadNewVersion().execute(); 

      } 
     }); 
     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
       startActivity(intent); 
      } 
     }); 
     dialog = builder.create(); 
     res=true; 
    } 
    return res; 

} 
+0

特にif文と条件として文脈や意味に敏感なことについて、コードに関して質問をするときには、そのコードが書かれている言語を常にタグとして含めます。次回は忘れないでください。 –

答えて

0

あなたのコードで間違って処理されていると思います。改良が必要なことはたくさんありますが、私はすぐにあなたのコードで見ることができる重要なことを強調します。

@PeterJのように、これはコードで行っている論理エラーです。 truecheckPlayServices()に戻します。これは、if (resultCode != ConnectionResult.SUCCESS)が真の場合にのみtrueを返すように修正する必要があります。それ以外の場合は、ダイアログが表示されないようにfalseを返す必要があります。

今、クラッシュについての2番目の懸念があります。あなたのelse状態でのみsuper.onCreate(savedInstanceState);と呼んでいるからです。

派生クラスonCreate(bundle)メソッドは、このメソッドのスーパークラス実装を呼び出す必要があります。あなたは、その後、例外はこれを修正するには

SuperNotCalledException

をスローされますされない場合は、お使いの onCreate()関数の先頭にこの文を移動し、うまくいけば、これは、それによって引き起こされるクラッシュの問題を修正します。

0

答えは非常に簡単です - あなたは、常にこの関数の戻り値としてtrueを返すため。 returnの声明はreturn true;

+0

WOW、ありがとうございました。 if/else条件が正しく機能するコードをどのように変更できますか? – Saeidhp

+0

それはあなたの関数です。あなたが偽を返す必要があるときをどうやって知ることができますか? –

+0

elseで偽を返したいのですが、私のコードも機能しません。 – Saeidhp

関連する問題