Java Android变量范围;或者,我的绳子到底在哪里
我正在开发一个简单的Android应用程序,带有GPS监听器和网络视图 我可以毫无疑问地得到纬度和经度。问题是,我想把纬度和经度放到一个URL中(比如myurl.com/mypage.php?lat=57&lon=21)。。。但是存储数据的变量仅限于其类。我不知道如何声明或创建一个可以在整个主类中使用的变量。这是我的密码: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
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方法。我不明白您所说的“受限于其类”是什么意思。你想完成什么?你想在哪里访问什么?