Моя ситуация такова, что я могу получить широту и долготу при создании своего фрагмента.Затем я хочу отправить эти значения в мой открытый класс Sun, но мои попытки показывают, что эти значения равны нулю в классе Sun Public.Однако мой logcat показывает, что эти значения генерируются в моем фрагменте.Это говорит мне, что мой код местоположения работает, я просто передаю эти значения в свой публичный класс.
Поэтому мой вопрос заключается в том, существует ли способ отправить эти значения в открытый класс из фрагмента или возможно, что экземпляр, вызываемый в моем onCreateView, вызывается до того, как долгота и широта генерируются в onCreate?Если это так, есть ли способ получить значения долготы и широты, прежде чем генерируется onCreateView.По сути, мне нужно местоположение из фрагмента, чтобы вычислить в моем публичном классе солнца. Местоположение выделено жирным шрифтом.Насколько я понимаю, onCreate генерируется до onCreateView. Я не уверен, почему это так.Вот мой код:
Фрагмент
public class TestFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
requestPermission();
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());
if (ActivityCompat.checkSelfPermission(getActivity(), ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mFusedLocationClient.getLastLocation().addOnSuccessListener(getActivity(), new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
System.out.println("This is latitude:" + latitude);
System.out.println("This is longitude:" + longitude);
}
}
});
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
private void requestPermission(){
ActivityCompat.requestPermissions(getActivity(),new String[]{ACCESS_FINE_LOCATION}, 1);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Sun sunInstance = new Sun();
sunInstance.SunmCalculation();
return view;
Публичный класс Sun
public class Sun {
private double M = 356.0470 + 0.9856002585 * PlanetVariableCalculations.getd2();
private double w = 282.9404 + 4.70935e-5 * PlanetVariableCalculations.getd2();
public void SunmCalculation() {
if (M < 0) {
while (M < 0) {
M = M + 360;
}
} else if (M > 360) {
while (M > 360) {
M = M - 360;
}
}
double L = w + M;
SunSidereal(L);
}
private void SunSidereal(Double L){
double Ls = L;
double RAhours = 300;
double GMST0 = Ls/15 +12;
double SIDTIME = GMST0 + UTCValues.getutcComplete() + **Longitude**/15;
double HA = SIDTIME - RAhours;
System.out.println("This is SIDTIME:" + SIDTIME);
System.out.println("This is HA:" + HA);
System.out.println("This is the longitude: " + Longitude );
}
}