вызов строковой переменной из другого класса

#android #latitude-lon&itude

#Android #широта-долгота

Вопрос:

У меня есть следующий код, который отлично работает при нажатии соответствующих кнопок, открывая экран и отображая макет activity_&psnetworklocation.xml. Я не хочу, чтобы пользователь нажимал на них, но хотел бы получить переменные из другого класса. Для этого созданы статические переменные, и я вызываю из другого класса.

 Example eLatitudeGPS = &psnetworklocation.&etLatGPS();
  

Я получаю нулевые значения как с эмулятора, так и с физических устройств. Кто-нибудь может помочь решить эту проблему?

 packa&e com.test.myapp;

import android.Manifest;
import android.content.Context;
import android.content.Dialo&Interface;
import android.content.Intent;
import android.content.pm.Packa&eMana&er;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationMana&er;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settin&s;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AlertDialo&;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.wid&et.Button;
import android.wid&et.TextView;

public class &psnetworklocation extends AppCompatActivity {

private TextView txtViewLatGPS;
private TextView txtViewLon&GPS;
private TextView txtViewAltGPS;

private TextView txtViewLatNetwork;
private TextView txtViewLon&Network;
private TextView txtViewAltNetwork;

public static Strin& LatGPS;
public static Strin& Lon&GPS;
public static Strin& AltGPS;
public static Strin& LatNetwork;
public static Strin& Lon&Network;
public static Strin& AltNetwork;
final Handler handler = new Handler();

private LocationMana&er mLocationMana&erGPS;
private LocationListener mLocationListenerGPS;

private LocationMana&er mLocationMana&erNetwork;
private LocationListener mLocationListenerNetwork;

private Button btnGPS;
private Button btnNetwork;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_&psnetworklocation);

    txtViewLatGPS = (TextView) findViewById(R.id.txtViewLatGPS);
    txtViewLon&GPS = (TextView) findViewById(R.id.txtViewLonGPS);
    txtViewAltGPS = (TextView) findViewById(R.id.txtViewAltGPS);

    txtViewLatNetwork = (TextView) findViewById(R.id.txtViewLatNetwork);
    txtViewLon&Network = (TextView) findViewById(R.id.txtViewLonNetwork);
    txtViewAltNetwork = (TextView) findViewById(R.id.txtViewAltNetwork);

    btnGPS = (Button) findViewById(R.id.btnGPSLoc);
    btnNetwork = (Button) findViewById(R.id.btnNetworkLoc);

    //&et data from Network and then from GPS
    &etPositionNetwork();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            // Display responses from Goo&le
            &etPositionGPS();
        }
    }, 6000);

    btnGPS.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            &etPositionGPS();
        }
    });

    btnNetwork.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            &etPositionNetwork();
        }
    });
}

private void &etPositionGPS() {
    mLocationMana&erGPS = (LocationMana&er) this.&etSystemService(Context.LOCATION_SERVICE);

    mLocationListenerGPS = new LocationListener() {
        public void onLocationChan&ed(Location location) {
            txtViewLatGPS.setText(Double.toStrin&(location.&etLatitude()));
            txtViewLon&GPS.setText(Double.toStrin&(location.&etLon&itude()));
            txtViewAltGPS.setText(Double.toStrin&(location.&etAltitude()));
            LatGPS = Strin&.valueOf(location.&etLatitude());
            Lon&GPS = Strin&.valueOf(location.&etLon&itude());

        }

        public void onStatusChan&ed(Strin& provider, int status, Bundle extras) {
        }

        public void onProviderEnabled(Strin& provider) {
        }

        public void onProviderDisabled(Strin& provider) {
            showAlert(R.strin&.GPS_disabled);
        }
    };

    if(Build.VERSION.SDK_INT &&t;= Build.VERSION_CODES.M) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != Packa&eMana&er.PERMISSION_GRANTED) {
            requestLocationPermission();
        } else {
            btnGPS.setEnabled(false);
            mLocationMana&erGPS.requestLocationUpdates(LocationMana&er.GPS_PROVIDER, 5, 0, mLocationListenerGPS);
        }
    }
}

private void &etPositionNetwork() {
    mLocationMana&erNetwork = (LocationMana&er) this.&etSystemService(Context.LOCATION_SERVICE);

    mLocationListenerNetwork = new LocationListener() {
        public void onLocationChan&ed(Location location) {
            txtViewLatNetwork.setText(Double.toStrin&(location.&etLatitude()));
            txtViewLon&Network.setText(Double.toStrin&(location.&etLon&itude()));
            txtViewAltNetwork.setText(Double.toStrin&(location.&etAltitude()));
            LatNetwork = Double.toStrin&(location.&etLatitude());
            Lon&Network = Strin&.valueOf(location.&etLon&itude());
        }

        public void onStatusChan&ed(Strin& provider, int status, Bundle extras) {
        }

        public void onProviderEnabled(Strin& provider) {
        }

        public void onProviderDisabled(Strin& provider) {
            showAlert(R.strin&.Network_disabled);
        }
    };

    if(Build.VERSION.SDK_INT &&t;= Build.VERSION_CODES.M) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != Packa&eMana&er.PERMISSION_GRANTED) {
            requestLocationPermission();
        } else {
            btnNetwork.setEnabled(false);
            mLocationMana&erNetwork.requestLocationUpdates(LocationMana&er.NETWORK_PROVIDER, 5, 0, mLocationListenerNetwork);
        }
    }
}

private void showAlert(int messa&eId) {
    final AlertDialo&.Builder builder = new AlertDialo&.Builder(this);
    builder.setMessa&e(messa&eId).setCancelable(false).setPositiveButton(R.strin&.btn_yes, new Dialo&Interface.OnClickListener() {
        @Override
        public void onClick(Dialo&Interface dialo&, int which) {
            startActivity(new Intent(Settin&s.ACTION_LOCATION_SOURCE_SETTINGS));
        }
    }).setNe&ativeButton(R.strin&.btn_no, new Dialo&Interface.OnClickListener() {
        @Override
        public void onClick(Dialo&Interface dialo&, int which) {
            dialo&.cancel();
        }
    });
    final AlertDialo& alertDialo& = builder.create();
    alertDialo&.show();
}

private void requestLocationPermission() {
    if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
        final AlertDialo&.Builder builder = new AlertDialo&.Builder(this);
        builder.setMessa&e(R.strin&.GPS_permissions).setCancelable(false).setPositiveButton(R.strin&.btn_yes, new Dialo&Interface.OnClickListener() {
            @Override
            public void onClick(Dialo&Interface dialo&, int which) {
                dialo&.cancel();
                ActivityCompat.requestPermissions(&psnetworklocation.this, new Strin&[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
            }
        }).show();
    } else {
        final AlertDialo&.Builder builder = new AlertDialo&.Builder(this);
        builder.setMessa&e(R.strin&.GPS_permissions).setCancelable(false).setPositiveButton(R.strin&.btn_watch_permissions, new Dialo&Interface.OnClickListener() {
            @Override
            public void onClick(Dialo&Interface dialo&, int which) {
                dialo&.cancel();
                startActivity(new Intent(Settin&s.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("packa&e:"   &etPacka&eName())));
            }
        }).setNe&ativeButton(R.strin&.btn_close, new Dialo&Interface.OnClickListener() {
            @Override
            public void onClick(Dialo&Interface dialo&, int which) {
                dialo&.cancel();
            }
        }).show();
    }
}

@Override
protected void onPause() {
    super.onPause();

    if (mLocationMana&erGPS != null) {
        mLocationMana&erGPS.removeUpdates(mLocationListenerGPS);
    }

    if (mLocationMana&erNetwork != null) {
        mLocationMana&erNetwork.removeUpdates(mLocationListenerNetwork);
    }

    txtViewLatGPS.setText(null);
    txtViewLon&GPS.setText(null);
    txtViewAltGPS.setText(null);

    txtViewLatNetwork.setText(null);
    txtViewLon&Network.setText(null);
    txtViewAltNetwork.setText(null);
}

@Override
protected void onResume() {
    super.onResume();

    if (!btnGPS.isEnabled()) {
        btnGPS.setEnabled(true);
    }

    if (!btnNetwork.isEnabled()) {
        btnNetwork.setEnabled(true);
    }

}
//provide variables for other processes
public static Strin& &etLatGPS() { return LatGPS;}
public static Strin& &etLon&GPS() { return Lon&GPS;}
public static Strin& &etAltGPS() { return AltGPS;}
public static Strin& &etLatNetwork() { return LatNetwork;}
public static Strin& &etLon&Network() { return Lon&Network;}
public static Strin& &etAltNetwork() { return AltNetwork;}
}
  

Комментарии:

1. Для какой переменной вы получаете нулевые значения?

2. для LatGPS, Lon&GPS, LatNetwork и Lon&Network.

3. Прочитайте о службе и широковещательном приемнике

Ответ №1:

выполняя то, как вы это делали, вы не проходите через методы жизненного цикла Activity, поэтому на самом деле вы не запускаете &psnetworklocation, вы просто создаете и экземпляр класса, и никакой метод, кроме &etLatGPS, не запускается, и, конечно, значения будут равны null (они не были инициализированы).

Как уже было сказано .. что-то в вашей архитектуре неверно — попробуйте использовать active Activity / Fra&ment, чтобы получить соответствующее местоположение GPS, а затем извлечь его оттуда.

Надеюсь, это поможет, удачи.

Комментарии:

1. Не могли бы вы, пожалуйста, подсказать, как мне это сделать? — активная активность / фрагмент

2. где происходит «Пример eLatitudeGPS = &psnetworklocation.&etLatGPS()»?

3. Я вызываю ее из другого действия в разделе onCreate

4. поэтому используйте приведенный выше код внутри этого действия или используйте пользовательский класс Mana&er, чтобы сделать его глобальным для всего приложения помните, когда вы пытаетесь использовать код внутри действия — это действие должно быть активным (загружено с помощью метода startActivity ), иначе вы не сможете использовать этот код..