From e5f35c6ca4b75ef6ab9d63f0e682c3bdc1afae8d Mon Sep 17 00:00:00 2001 From: it232115 Date: Fri, 14 Jun 2024 11:12:43 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=83=BBFirebase=E3=81=8B=E3=82=89?= =?UTF-8?q?=E5=8F=97=E3=81=91=E5=8F=96=E3=81=A3=E3=81=9F=E4=BD=8F=E6=89=80?= =?UTF-8?q?=E3=81=AE=E7=B7=AF=E5=BA=A6=E7=B5=8C=E5=BA=A6=E5=A4=89=E6=8F=9B?= =?UTF-8?q?(=E6=9C=AA=E9=81=94)(=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AF?= =?UTF-8?q?=E3=81=A7=E3=81=AA=E3=81=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 10 ++-- .../com/example/oplogy/AddressConverter.java | 27 +++++++++ .../example/oplogy/FirestoreReception.java | 26 +-------- .../java/com/example/oplogy/GeoCoding.java | 58 +++++++++++++++++++ .../java/com/example/oplogy/MainActivity.java | 9 ++- .../com/example/oplogy/SetupActivity.java | 4 +- build.gradle | 3 +- 8 files changed, 102 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/com/example/oplogy/AddressConverter.java create mode 100644 app/src/main/java/com/example/oplogy/GeoCoding.java diff --git a/app/build.gradle b/app/build.gradle index 8f90306..c6040b1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,7 +36,7 @@ android { } dependencies { - + implementation 'com.google.maps:google-maps-services:0.15.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e938999..f968f7b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ - + 0) { +// // 位置情報(緯度と経度)を返します +// return results[0].geometry.location; +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// // 結果が存在しない場合やエラーが発生した場合は、nullを返します +// return null; +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/example/oplogy/FirestoreReception.java b/app/src/main/java/com/example/oplogy/FirestoreReception.java index 9f50d67..942409a 100644 --- a/app/src/main/java/com/example/oplogy/FirestoreReception.java +++ b/app/src/main/java/com/example/oplogy/FirestoreReception.java @@ -4,13 +4,11 @@ import android.util.Log; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; -import com.google.firebase.Timestamp; import com.google.firebase.firestore.CollectionReference; import com.google.firebase.firestore.FirebaseFirestore; import com.google.firebase.firestore.QueryDocumentSnapshot; import com.google.firebase.firestore.QuerySnapshot; -import java.util.List; import java.util.Map; public class FirestoreReception { @@ -35,27 +33,9 @@ public class FirestoreReception { for (QueryDocumentSnapshot document : task.getResult()) { Map data = document.getData(); - // デバッグ用のログ出力 - Log.d("FirestoreReception", "Document ID: " + document.getId()); - Log.d("FirestoreReception", "Data: " + data); - - // ここでデータを取得し、必要に応じて処理を行います -// String parentName = (String) data.get("patronName"); -// String childName = (String) data.get("childName"); -// String studentId = (String) data.get("studentNumber"); -//// Timestamp address = (Timestamp) data.get("address"); -// List firstDay = (List) data.get("firstDay"); -// List secondDay = (List) data.get("secondDay"); -// List thirdDay = (List) data.get("thirdDay"); -// -// // 取得したデータを使って必要な処理を行う -// Log.d("FirestoreReception", "ParentName: " + parentName); -// Log.d("FirestoreReception", "ChildName: " + childName); -// Log.d("FirestoreReception", "StudentNumber: " + studentId); -//// Log.d("FirestoreReception", "Address: " + address.toDate()); -// Log.d("FirestoreReception", "First Day: " + firstDay); -// Log.d("FirestoreReception", "Second Day: " + secondDay); -// Log.d("FirestoreReception", "Third Day: " + thirdDay); + // CreateRootクラスのインスタンスを作成し、dataを引数として渡す + GeoCoding geoCoding = new GeoCoding(); + geoCoding.processData(data); } } else { Log.w("FirestoreReception", "Error getting documents.", task.getException()); diff --git a/app/src/main/java/com/example/oplogy/GeoCoding.java b/app/src/main/java/com/example/oplogy/GeoCoding.java new file mode 100644 index 0000000..7e48c01 --- /dev/null +++ b/app/src/main/java/com/example/oplogy/GeoCoding.java @@ -0,0 +1,58 @@ +package com.example.oplogy; + +import android.util.Log; + +import com.google.android.gms.maps.model.LatLng; +import com.google.firebase.Timestamp; +import com.google.maps.GeoApiContext; +import com.google.maps.GeocodingApi; +import com.google.maps.model.GeocodingResult; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class GeoCoding { + private GeoApiContext geoApiContext; + public void processData(Map data) { + + try { + // Google Cloud Platformで作成したAPIキーを設定します + geoApiContext = new GeoApiContext.Builder() + .apiKey("AIzaSyBQ1Ak-I2NL5TP4K59ZI0VgzKk6HNZuusw") + .build(); + //家庭訪問先の住所 + List address = (List) data.get("address"); + //家庭訪問の第一希望日(配列0が希望時間帯のはじめ、配列1がおわり) + List firstDay = (List) data.get("firstDay"); + //出席番号 + Long studentNumber = (Long) data.get("studentNumber"); + // 住所を緯度経度に変換 + LatLng latLng = geocodeAddress(address.get(0)); + + Log.d("FirestoreReception", "address: " + address.get(0)); + Log.d("FirestoreReception", "firstDay: " + firstDay.get(0)); + Log.d("FirestoreReception", "firstDay: " + firstDay.get(1)); + Log.d("FirestoreReception", "studentNumber: " + studentNumber); + + // 緯度経度をLogに出力 + Log.d("緯度経度", "latLng: "+latLng ); + } catch (NullPointerException e) { + Log.e("NullPointerException", "getの中身がnull" + e); + } + } + private LatLng geocodeAddress(String address) { + try { + Log.d("Geocodingtry", "tryに入った"); + GeocodingResult[] results = GeocodingApi.geocode(geoApiContext, address).await(); + Log.d("GeocodingResult", "Results: " + Arrays.toString(results)); + if (results != null && results.length > 0) { + return new LatLng(results[0].geometry.location.lat, results[0].geometry.location.lng); + } + } catch (Exception e) { + Log.e("GeocodingException", "Error geocoding address: " + address, e); + } + return null; + } + +} diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java index d7dc725..1910263 100644 --- a/app/src/main/java/com/example/oplogy/MainActivity.java +++ b/app/src/main/java/com/example/oplogy/MainActivity.java @@ -1,18 +1,17 @@ package com.example.oplogy; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; - import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; -import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + import com.google.firebase.firestore.FirebaseFirestore; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ @@ -87,7 +86,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe // セットアップのクリック処理 if(view == setUp){ imageSetup.setImageResource(R.drawable.ischecked_uuid); - Intent toSetup = new Intent(MainActivity.this,SetupActivity.class); + Intent toSetup = new Intent(MainActivity.this,SetUpActivity.class); startActivity(toSetup); } diff --git a/app/src/main/java/com/example/oplogy/SetupActivity.java b/app/src/main/java/com/example/oplogy/SetupActivity.java index 13a4902..f775443 100644 --- a/app/src/main/java/com/example/oplogy/SetupActivity.java +++ b/app/src/main/java/com/example/oplogy/SetupActivity.java @@ -4,11 +4,11 @@ import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; -public class SetupActivity extends AppCompatActivity { +public class SetUpActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.setup); + setContentView(R.layout.activity_set_up); } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index d1342f7..e8b1579 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,11 @@ buildscript { dependencies { classpath 'com.google.gms:google-services:4.3.14' + } }// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '8.0.2' apply false id 'com.android.library' version '8.0.2' apply false id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false -} \ No newline at end of file +} From 8c634499ae7329f9c1c3f39e849481827db00a13 Mon Sep 17 00:00:00 2001 From: it232115 Date: Fri, 14 Jun 2024 12:29:30 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E7=B7=AF=E5=BA=A6=E7=B5=8C=E5=BA=A6?= =?UTF-8?q?=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92GeoCoding=E3=81=A7=E3=81=AF?= =?UTF-8?q?=E3=81=AA=E3=81=8FGeoCoder=E3=81=A7=E5=AE=9F=E8=A3=85=E3=80=82?= =?UTF-8?q?=E7=B7=AF=E5=BA=A6=E7=B5=8C=E5=BA=A6=E5=A4=89=E6=8F=9B=E6=88=90?= =?UTF-8?q?=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/oplogy/FirestoreReception.java | 6 +-- .../oplogy/{GeoCoding.java => GeoCoder.java} | 39 ++++++++++--------- .../java/com/example/oplogy/MainActivity.java | 2 +- 3 files changed, 24 insertions(+), 23 deletions(-) rename app/src/main/java/com/example/oplogy/{GeoCoding.java => GeoCoder.java} (60%) diff --git a/app/src/main/java/com/example/oplogy/FirestoreReception.java b/app/src/main/java/com/example/oplogy/FirestoreReception.java index 942409a..f8a71aa 100644 --- a/app/src/main/java/com/example/oplogy/FirestoreReception.java +++ b/app/src/main/java/com/example/oplogy/FirestoreReception.java @@ -20,7 +20,7 @@ public class FirestoreReception { } //ClassIdを引数にデータの作成を行う - public void getDocumentsByClassId(int classId) { + public void getDocumentsByClassId(int classId, MainActivity context) { CollectionReference collectionRef = db.collection("QuestionnaireForms"); // classIdが引数のものを取得する @@ -34,8 +34,8 @@ public class FirestoreReception { Map data = document.getData(); // CreateRootクラスのインスタンスを作成し、dataを引数として渡す - GeoCoding geoCoding = new GeoCoding(); - geoCoding.processData(data); + GeoCoder geoCoder = new GeoCoder(); + geoCoder.processData(data, context); } } else { Log.w("FirestoreReception", "Error getting documents.", task.getException()); diff --git a/app/src/main/java/com/example/oplogy/GeoCoding.java b/app/src/main/java/com/example/oplogy/GeoCoder.java similarity index 60% rename from app/src/main/java/com/example/oplogy/GeoCoding.java rename to app/src/main/java/com/example/oplogy/GeoCoder.java index 7e48c01..76d994a 100644 --- a/app/src/main/java/com/example/oplogy/GeoCoding.java +++ b/app/src/main/java/com/example/oplogy/GeoCoder.java @@ -1,26 +1,25 @@ package com.example.oplogy; +import android.content.Context; +import android.location.Address; +import android.location.Geocoder; import android.util.Log; import com.google.android.gms.maps.model.LatLng; import com.google.firebase.Timestamp; -import com.google.maps.GeoApiContext; -import com.google.maps.GeocodingApi; -import com.google.maps.model.GeocodingResult; -import java.util.Arrays; +import java.io.IOException; import java.util.List; +import java.util.Locale; import java.util.Map; -public class GeoCoding { - private GeoApiContext geoApiContext; - public void processData(Map data) { +public class GeoCoder { + private Context context; + public void processData(Map data, Context context) { try { - // Google Cloud Platformで作成したAPIキーを設定します - geoApiContext = new GeoApiContext.Builder() - .apiKey("AIzaSyBQ1Ak-I2NL5TP4K59ZI0VgzKk6HNZuusw") - .build(); + this.context = context; + //家庭訪問先の住所 List address = (List) data.get("address"); //家庭訪問の第一希望日(配列0が希望時間帯のはじめ、配列1がおわり) @@ -41,18 +40,20 @@ public class GeoCoding { Log.e("NullPointerException", "getの中身がnull" + e); } } + private LatLng geocodeAddress(String address) { try { - Log.d("Geocodingtry", "tryに入った"); - GeocodingResult[] results = GeocodingApi.geocode(geoApiContext, address).await(); - Log.d("GeocodingResult", "Results: " + Arrays.toString(results)); - if (results != null && results.length > 0) { - return new LatLng(results[0].geometry.location.lat, results[0].geometry.location.lng); + Geocoder geocoder = new Geocoder(context, Locale.getDefault()); + List
addresses = geocoder.getFromLocationName(address, 1); + if (addresses != null && !addresses.isEmpty()) { + Address addressResult = addresses.get(0); + double latitude = addressResult.getLatitude(); + double longitude = addressResult.getLongitude(); + return new LatLng(latitude, longitude); } - } catch (Exception e) { + } catch (IOException e) { Log.e("GeocodingException", "Error geocoding address: " + address, e); } return null; } - -} +} \ No newline at end of file diff --git a/app/src/main/java/com/example/oplogy/MainActivity.java b/app/src/main/java/com/example/oplogy/MainActivity.java index 1910263..347ef4c 100644 --- a/app/src/main/java/com/example/oplogy/MainActivity.java +++ b/app/src/main/java/com/example/oplogy/MainActivity.java @@ -66,7 +66,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe db = FirebaseFirestore.getInstance(); firestoreReception = new FirestoreReception(); - firestoreReception.getDocumentsByClassId(100); + firestoreReception.getDocumentsByClassId(100,MainActivity.this);