if (currentLocation!=null)で、elseへと、移動し、そこで、
try{}catch{}で、
java.lang.IllegalStateException:GoogleApiClientが接続されていませんと、表示されます。
また、
onConnected()が呼び出された時に、isConnected()をしたのですが、trueが返され、接続されていることがわかりました。
戻った時にエラーを発生しないようにしたいのですが、
どうすれば良いのでしょうか?アドバイスをいただけないでしょうか?
また、なぜ、currentLocationがnullとなってしまうのでしょうか?
//この下のコードをonCreate()からonStartに移動しまし、戻るボタンを押して、onCreateに記載していた初期化を、onStartに記載することで、再生成されるようにしました。
java
1//このようにGoogpeApiClientを生成しております。 2 startFusedLocation(); 3 private void startFusedLocation() { 4 Log.d("fusedLocation", "よばれた"); 5 6 if (!mResolvingError) { 7 8 Log.d("---googleconectよぶ---", "mGoogleconnect"); 9 10 mGoogleApiClient = new GoogleApiClient.Builder(this) 11 .addApi(LocationServices.API) 12 .addConnectionCallbacks(this) 13 .addOnConnectionFailedListener(this) 14 .build(); 15 16 mGoogleApiClient.connect(); 17 18 Log.d("onStart()","connect()"); 19 20 } else { 21 Log.d("onStart()","mResolvingError"); 22 } 23 24 }
java
1@Override 2 public void onConnected(Bundle bundle) { 3 Log.d("LocationActivity", "onConnected"); 4 5 Log.d("---googleconectでよばれた---", "onConnected()到着"); 6 7 8 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != 9 PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != 10 PackageManager.PERMISSION_GRANTED) { 11 return; 12 } 13 14 //これ追加 15 fusedLocationProviderApi = LocationServices.FusedLocationApi; 16 17Location currentLocation = fusedLocationProviderApi.getLastLocation(mGoogleApiClient); 18 19 if (currentLocation != null && currentLocation.getTime() > 20000) { 20 location = currentLocation; 21 22 23 Log.d("---onConnected now-----", "次はselectする"); 24 25 26//現在地を取得してる //////////////// 27 latitude = location.getLatitude(); 28 longitude = location.getLongitude(); 29 30 31 select(latitude, longitude); 32 33 Log.d("if(c=null)", "からでた"); 34 35 } else { 36 37 Log.d("だめだった", "例外の可能性ある"); 38 // バックグラウンドから戻ってしまうと例外が発生する 39 try { 40 41 fusedLocationProviderApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this); 42 43 Executors.newScheduledThreadPool(1).schedule(new Runnable() { 44 @Override 45 public void run() { 46 fusedLocationProviderApi.removeLocationUpdates(mGoogleApiClient, LocationActivity.this); 47 } 48 }, 60000, TimeUnit.MILLISECONDS); 49 50 51 } catch (Exception e) { 52 System.out.println(e); 53 Toast toast = Toast.makeText(this, "例外が発生、位置情報のPermissionを許可していますか?", Toast.LENGTH_SHORT); 54 toast.show(); 55 56 //MainActivityに戻す 57 finish(); 58 }
java
1@Override 2public void onConnectionFailed(ConnectionResult connectionResult) { 3if (mResolvingError) { 4System.out.println("mResolveingErrorあああああああああああああ"); 5return; 6} else if (connectionResult.hasResolution()) { 7try { 8System.out.println("connectionResult.hasResolutionやああああああああ"); 9mResolvingError = true; 10connectionResult.startResolutionForResult(this, REQUEST_RESOLVE_ERROR); 11} catch (IntentSender.SendIntentException e) { 12 13System.out.println("connect"); 14mGoogleApiClient.connect(); 15} 16} else { 17showErrorDialog(connectionResult.getErrorCode()); 18mResolvingError = true; 19System.out.println("elseやあああああああああああああ"); 20} 21} 22 23private void showErrorDialog(int errorCode) { 24System.out.println("showErrorDialogやああああああいいいいいいいいいいい"); 25ErrorDialogFragment dialogFragment = new ErrorDialogFragment(); 26Bundle args = new Bundle(); 27args.putInt(DIALOG_ERROR, errorCode); 28dialogFragment.setArguments(args); 29dialogFragment.show(getSupportFragmentManager(), "errordialogあああああああああああああああああああ"); 30} 31 32public void onDialogDismissed() { 33System.out.println("onDialogDismissedでいいいいいいいいいいいいいいい"); 34mResolvingError = false; 35} 36 37public static class ErrorDialogFragment extends DialogFragment { 38public ErrorDialogFragment() { 39} 40 41@Override 42public Dialog onCreateDialog(Bundle savedInstanceState) { 43int errorCode = this.getArguments().getInt(DIALOG_ERROR); 44return GoogleApiAvailability.getInstance().getErrorDialog( 45this.getActivity(), errorCode, REQUEST_RESOLVE_ERROR); 46} 47 48@Override 49public void onDismiss(DialogInterface dialog) { 50((LocationActivity) getActivity()).onDialogDismissed(); 51System.out.println("onDialogDismissedううううううううううううううううううう"); 52} 53}
電波が悪く2度質問ボタンををしたところ2度質問してしまいました。すみません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/01 05:16 編集
2017/05/01 06:04 編集
2017/05/01 08:34
2017/05/01 16:33 編集
2017/05/01 21:07