Android可变范围;或者,哪里是我的字符串

时间:2012-02-18 01:06:49

标签: java android webview gps locationlistener

我正在开发一个简单的Android应用程序,带有GPS监听器和webview。

我可以毫无问题地获得经纬度。问题是,我想将纬度和经度放入一个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 个答案:

答案 0 :(得分:1)

您的OnCreate方法是在活动开始时调用的方法。那时,txtnull。这就是为什么它不会显示在你的网址中。然后,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);
}

答案 1 :(得分:0)

在这里添加一个新行:

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

在任意位置访问您的位置

答案 2 :(得分:0)

Buddy在你的代码中只是一个很小的逻辑错误。让我解释。您正在加载URL之后立即请求位置更新。现在位置监听是不同的线程,它正在更新txt变量的值。更新位置需要时间。每次拍摄时间都可能不同。这就是为什么你需要将loadUrl代码移动到onLocationChanged方法。