Как передать объект (в данном случае удвоенный) из фрагмента в открытый класс? - PullRequest
0 голосов
/ 08 декабря 2018

Моя ситуация такова, что я могу получить широту и долготу при создании своего фрагмента.Затем я хочу отправить эти значения в мой открытый класс 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  );

}

}

1 Ответ

0 голосов
/ 08 декабря 2018

Измените сигнатуры методов в классе следующим образом:

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(Double longtitude) {
        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, longtitude);
    }

    private void SunSidereal(Double L, Double longtitude){
        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  );
    }
}

Вы можете создать объект класса Sun внутри onSuccess():

Sun sun = new Sun();

и вызвать егоSunmCalculation() метод, подобный этому:

sun.SunmCalculation(longitude);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...