Android Variable Scope;или, где, черт возьми, моя строка - PullRequest
0 голосов
/ 18 февраля 2012

Я работаю над простым приложением для Android с GPS-слушателем и веб-просмотром.

Я могу получить широту и долготу без проблем.Проблема в том, что я хочу поместить широту и долготу в URL (например, myurl.com/mypage.php?lat=57&lon=21) ... но переменная, в которой хранятся данные, ограничена его классом.Я не могу понять, как объявить или создать переменную, которую я могу использовать во всем основном классе.Вот мой код:

public class WTest2Activity extends Activity {
    public String txt;
    public class MyLocationListener implements LocationListener {

        public void onLocationChanged(Location loc) {
            loc.getLatitude();
            loc.getLongitude();
            txt = "Latitude: " + loc.getLatitude() + "Longitude: " + loc.getLongitude();
            Toast.makeText( getApplicationContext(),txt,Toast.LENGTH_SHORT).show();
        }
        public void onProviderDisabled(String provider) {
            Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT ).show();
        }
        public void onProviderEnabled(String provider) {
            Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {} /* do nothing */

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /* Use the LocationManager class to obtain GPS locations */
        LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);

        WebView webview;
        webview = (WebView) findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl("http://www.myurl.com/page.php?this=" + txt);
    }
}

Ответы [ 3 ]

1 голос
/ 18 февраля 2012

Ваш OnCreate метод - это метод, вызываемый в начале Activity .В то время txt равно null.Вот почему он не отображается в вашем URL .Затем onLocationChanged устанавливает значение txt, но где вы будете использовать это впоследствии? нигде !.

Вы должны переместить то, что вы делаете в onCreate на onLocationChanged:

public void onLocationChanged(Location loc) {
    loc.getLatitude();
    loc.getLongitude();
    txt = "Latitude: " + loc.getLatitude() + "Longitude: " + loc.getLongitude();
    Toast.makeText( getApplicationContext(),txt,Toast.LENGTH_SHORT).show();

    webview.loadUrl("http://www.myurl.com/page.php?this=" + txt);
}
0 голосов
/ 18 февраля 2012

Приятель, это просто маленькая логическая ошибка в твоем коде. Позволь мне объяснить. Вы запрашиваете обновления местоположения, а затем сразу после этого загружаете URL. Теперь прослушивание местоположения - это другой поток, который обновляет значение переменной txt. И обновление местоположения занимает время. И время может быть разным каждый раз. Вот почему вам нужно переместить код loadUrl в метод onLocationChanged.

0 голосов
/ 18 февраля 2012

добавьте новую строку здесь:

public class WTest2Activity extends Activity {
    public String txt;
    public Location location;

, затем, в вашем public void onLocationChanged(Location loc), попробуйте установить location.setLatitude(loc.getLatitide); и location.setLongitude(loc.getLongitude);

, тогда вы можете получить доступ к вашему местоположению в любом месте с помощьюваша глобальная переменная location

...