前提・実現したいこと
Android Studio を用いて、スマホアプリを開発しています。
ボタンを押すと、距離を算出して画面に表示するプログラミングを作っており、わからないことがあるのです。
緯度経度を定義している部分(8つ)をリスナの外に出したいのですが、強制終了してしまいます。
リスナの中に定義すると、実行はするのですが、できればリスナ外で定義をしたいです。
どのようにすれば宜しいでしょうか?
該当のソースコード
public class DistanceActivity extends AppCompatActivity { private FusedLocationProviderClient fusedLocationClient; TextView home_latitude; TextView write_latitude; TextView home_longitude; TextView write_longitude; TextView set_distance; EditText assumed_distance; TextView now_latitude; TextView now_longitude; TextView num_distance_to_home; String num_distance_to_home2; double num_distance_to_home3; String set_distance2; double set_distance3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_distance); // LocationClientクラスのインスタンスを生成 fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); // 位置情報取得開始 startUpdateLocation(); //こちらに以下の8つを置きたい。 Button register_myHome = findViewById(R.id.register_my_home); register_myHome.setOnClickListener(v -> { home_latitude = findViewById(R.id.home_latitude); write_latitude = findViewById(R.id.now_latitude); String text1 = write_latitude.getText().toString(); home_latitude.setText(text1); home_longitude = findViewById(R.id.home_longitude); write_longitude = findViewById(R.id.now_longitude); String text2 = write_longitude.getText().toString(); home_longitude.setText(text2); }); home_latitude = findViewById(R.id.home_latitude); home_longitude = findViewById(R.id.home_longitude); //ボタンを押すと、距離を算出してくれる仕組み //distance[0]は2地点間の距離 Button btn_distance_to_home = findViewById(R.id.btn_distance_to_home); btn_distance_to_home.setOnClickListener(v -> { //以下の8つ String now_latitude2 = now_latitude.getText().toString(); String now_longitude2 = now_longitude.getText().toString(); double now_latitude3 = Double.parseDouble(now_latitude2); double now_longitude3 = Double.parseDouble(now_longitude2); String home_latitude2 = home_latitude.getText().toString(); String home_longitude2 = home_longitude.getText().toString(); double home_latitude3 = Double.parseDouble(home_latitude2); double home_longitude3 = Double.parseDouble(home_longitude2); //以上 float[] distance = getDistance(now_latitude3, now_longitude3, home_latitude3, home_longitude3); String dis = String.valueOf(distance[0]); num_distance_to_home = findViewById(R.id.num_distance_to_home); num_distance_to_home.setText(dis); }); num_distance_to_home = findViewById(R.id.num_distance_to_home); } /* * 2点間の距離(メートル)、方位角(始点、終点)を取得 * ※配列で返す[距離、始点から見た方位角、終点から見た方位角] */ public float[] getDistance(double x, double y, double x2, double y2) { // 結果を格納するための配列を生成 float[] results = new float[3]; // 距離計算 Location.distanceBetween(x, y, x2, y2, results); return results; } }