2017-12-16 41 views
0

私はアンドロイドアプリを作成しています。現在、場所はハードコードされています。経度と緯度はoncreateメソッドで宣言されています。私はoncreateメソッドの外で経度と緯度を取得するメソッドを作成しています。あなたが見る場所がlatitudelatitude変数にハードコードされるように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"); 
} 

です。

また、ユーザーの電話の最後の座標を取得する方法も作成しました。これはoncreateメソッドの外です。私はoncreate方法でlongitudelatitudeに、latti、および位置特定方法でlongiの値を代入する方法を

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(); 

     } 
    } 
} 

+1

これらの2つの変数を 'getLocation();'の前に宣言し、これら2つの変数を 'getLocation'関数に渡す必要があります。 –

+1

'getLastKnownLocation()'に頼ることができず、実際に位置の更新を要求するか、または単一の位置更新を要求すると、 'onCreate()'で 'getForecast()'をもう呼び出せないので、これは、ロケーションのフェッチが非同期操作であるためです。代わりにその場所を受信した後にのみ呼び出す必要があります。だから、これまでの答えは少し前進するが、それほど遠くはない。 –

+0

あなたに役立つ解決策の1つを受け入れてください –

答えて

0

はどのようoncreate方法における経度と緯度に、位置 方法でlatti、及びlongiの値を割り当てることになります。

私は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(); 
    } 

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

、グローバル変数として(onCreate方法のうち)緯度と経度を宣言するためにあなたをお勧めしそれとも、この2つの変数を渡すことができます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(); 
     } 
    } 
} 
+0

これはちょうどlattiとlongiにハードコードされた場所を割り当てていませんか? – JAWER

+0

回答が編集されました –

0
  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()方法から場所のインスタンスであるとonCreate()

0
  1. にlattiとlongiをフェッチ宣言lattiとlongiはMainActivityにあります。この コードで行ったようにlattilongi値を設定する方法getLocation()を呼び出す2.after

は、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 

別の解決策は、ゲッター&セッターです。 (注:latitudeとlongitudeは必要ありません)

関連する問題