繁体   English   中英

将方法中的变量传递给onCreate方法中的另一个变量

[英]Passing variables from method into another variable in the onCreate method

我正在创建一个android应用。 当前位置是硬编码的。经度和纬度在oncreate方法中声明。 我已经创建了一种方法来获取oncreate方法之外的经度和纬度。

这是oncreate方法

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

    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    getLocation();

    //Doublin Co-ordinates
    final double latitude = 53.3498;
    final double longitude = -6.2603;

    //Getting th data
    getForecast(latitude, longitude);
    Log.d(Tag,"MAIN UI code running");
}

如您所见,该位置是硬编码在latitudelatitude变量中的。

我还创建了一种获取用户电话的最后已知坐标的方法。 这超出了oncreate方法。

void getLocation() {
    if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

    } else {
        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        if (location != null){
            double latti = location.getLatitude();
            double longi = location.getLongitude();;
        } else {
            Toast.makeText( this, "Unable to get location. Please try again:", Toast.LENGTH_LONG ).show();

        }
    }
}

如何在oncreate方法中将location方法中的lattilongi值分配给longitudelatitude

如何在oncreate方法中将经定位方法中的latti和longi值分配给经度和纬度。

我建议您将纬度和经度声明为全局变量(在onCreate方法中)

final double latitude = 53.3498;
final double longitude = -6.2603;

然后在getLocation函数中

  if (location != null){
      double latti = latitude ;
      double longi = longitude;
   } else {
      Toast.makeText( this, "Unable to get location. Please try again:", Toast.LENGTH_LONG ).show();
  }

或者,您可以将这两个变量传递给getLocation方法。

//Doublin Co-ordinates
final double latitude = 53.3498;
final double longitude = -6.2603;
getLocation(latitude,longitude);

以这种方式修改getLocation函数

void getLocation(double latitude,double longitude) {
    if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
    } else {
        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if (location != null){
            double latti = latitude;
            double longi = longitude;
        } else {
            Toast.makeText( this, "Unable to get location. Please try again:", Toast.LENGTH_LONG ).show();
        }
    }
}
  1. 最好的方法是将字段声明为全局字段,然后将值分配给这些字段,然后在onCreate()或所需位置使用它。

  2. getLocation()返回一个配对实例

     onCreate() { .... Pair<Double, Double> locationInfo = getLocation(); final double latitude = locationInfo.first; final double longitude = locationInfo.second; } Pair<Double, Double> getLocation(){ .... double latti = location.getLatitude(); double longi = location.getLongitude(); return new Pair<Double, Double>(latti, longi); } 
  3. 您可以做的是从getLocation()方法获取Location实例,并在onCreate()获取latti和longi

  1. 在MainActivity中声明latti和longi。 就像我在这段代码中所做的一样。

2.after调用方法getLocation()其设置lattilongi值,设定的值latitudelongitude 请看代码

请尝试以下代码:

public class MainActivity extends Activity 

{
        double latti; //new code
        double longi; //new code

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

    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    getLocation();

    //Doublin Co-ordinates
    final double latitude = latti; //i changed this line
    final double longitude = longi;//i changed this line

    //Getting th data
    getForecast(latitude, longitude);
    Log.d(Tag,"MAIN UI code running");
} //end of onCreate

void getLocation() {
    if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

    } else {
        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        if (location != null){
             latti = location.getLatitude();//i changed this line, (drooped the double)
             longi = location.getLongitude();//i changed this line, (drooped the double)
        } else {
            Toast.makeText( this, "Unable to get location. Please try again:", Toast.LENGTH_LONG ).show();

        }
    }
}

    } //end of MainActvity

另一个解决方案是吸气剂和吸气剂。 (旁注:您不需要纬度和经度,您可以只使用latti和longi)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM