Java Android变量范围;或者,我的绳子到底在哪里

Java Android变量范围;或者,我的绳子到底在哪里,java,android,webview,gps,locationlistener,Java,Android,Webview,Gps,Locationlistener,我正在开发一个简单的Android应用程序,带有GPS监听器和网络视图 我可以毫无疑问地得到纬度和经度。问题是,我想把纬度和经度放到一个URL中(比如myurl.com/mypage.php?lat=57&lon=21)。。。但是存储数据的变量仅限于其类。我不知道如何声明或创建一个可以在整个主类中使用的变量。这是我的密码: public class WTest2Activity extends Activity { public String txt; public class

我正在开发一个简单的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);
    }
}

您的
OnCreate
方法是在活动开始时调用的方法。当时,
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);
}
在此处添加新行:

public class WTest2Activity extends Activity {
    public String txt;
    public Location location;
然后,在您的
public void onLocationChanged(Location loc)
中,尝试设置
Location.setLatitude(loc.getLatitude)
位置设置经度(loc.getLongitude)


然后,您可以使用全局变量
location

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

我不明白您所说的“受限于其类”是什么意思。你想完成什么?你想在哪里访问什么?