Getter и Setter не работают в JobScheduler

Столкнулся с проблемой, в которой не могу разобраться. Я использовал геттер и сеттер для долготы строкового типа, которая устанавливается в методе onLocationChanged() поставщика местоположения (который меняет свое значение, как и ожидалось), и предполагается, что геттер будет использоваться в onStartJob() службы JobService. Однако геттер всегда равен нулю, хотя значение в установочной части продолжает меняться.

public class MyJobService extends JobService
        implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener
{
    String latitude;
    String longitude;

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }

    public String getLongitude() {
        return longitude;
    }

        @Override
    public boolean onStartJob(JobParameters jobParameters) {
        Toast.makeText(this,"MyJobService.onStartJob()",Toast.LENGTH_SHORT).show();

        Log.e("token", "Start Job Called");
        setUpLocationClientIfNeeded();
        mLocationRequest = LocationRequest.create();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(10000);
        mLocationRequest.setFastestInterval(10000);
        Log.e("longitude", getLongitude() + "zz"); // this value is always null

        return false;
    }

        @Override
    public void onLocationChanged(Location location) {
        Log.e("token",location.getLatitude()+""+location.getLongitude());
        Toast.makeText(this, location.getLatitude()+" "+location.getLongitude()+ "", Toast.LENGTH_SHORT).show();
        setLongitude(location.getLongitude() + "");
        Log.e("longitude inside location change", getLongitude() + "zz");
        // this value keeps changing, however it is not affecting the getLongitude method in onStartJob()
    }
}

person Amrita Stha    schedule 11.09.2017    source источник


Ответы (1)


Я мало что знаю о планировщиках заданий, но, увидев ваш код, если ваш onLocationChanged работает нормально и правильно обновляет значение долготы, вам следует просто сделать свою переменную статической.

вместо

String latitude;
String longitude;

использовать

public static String latitude;
public static String longitude;

Таким образом, вам даже не нужно использовать геттеры и сеттеры. Еще одна вещь: вам следует избегать использования геттеров и сеттеров в android. Вместо этого вы должны напрямую сделать свои переменные общедоступными статическими и получить к ним прямой доступ для повышения производительности.

person Tarun Chauhan    schedule 11.09.2017
comment
tysm потратил часы на это - person Amrita Stha; 11.09.2017
comment
Вы всегда должны избегать использования геттеров и сеттеров, и вместо этого вы должны сделать свои переменные общедоступными статическими для прямого доступа к ним. Это хорошо для производительности, как указано в документах. - person Tarun Chauhan; 11.09.2017