From ba8bb242d70817816dceb6fd6f8bf7afab1114dc Mon Sep 17 00:00:00 2001
From: Nezumi <123229563+Nez27@users.noreply.github.com>
Date: Wed, 8 Feb 2023 17:53:40 +0700
Subject: [PATCH] Get list district and ward from API
---
.idea/deploymentTargetDropDown.xml | 17 ---
app/build.gradle | 9 +-
app/src/main/AndroidManifest.xml | 2 +
.../com/capstone/foodify/API/ApiService.java | 28 ++++
.../foodify/DistrictWardResponse/Data.java | 33 +++++
.../foodify/DistrictWardResponse/Datas.java | 94 +++++++++++++
.../DisctrictWardResponse.java | 31 +++++
.../foodify/Fragment/ProfileFragment.java | 5 +-
.../com/capstone/foodify/SignUpActivity.java | 131 +++++++++++++++---
app/src/main/res/layout/activity_sign_up.xml | 2 +
10 files changed, 309 insertions(+), 43 deletions(-)
delete mode 100644 .idea/deploymentTargetDropDown.xml
create mode 100644 app/src/main/java/com/capstone/foodify/API/ApiService.java
create mode 100644 app/src/main/java/com/capstone/foodify/DistrictWardResponse/Data.java
create mode 100644 app/src/main/java/com/capstone/foodify/DistrictWardResponse/Datas.java
create mode 100644 app/src/main/java/com/capstone/foodify/DistrictWardResponse/DisctrictWardResponse.java
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
deleted file mode 100644
index cfed20b..0000000
--- a/.idea/deploymentTargetDropDown.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 9d8ce3c..92bd0e5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -31,10 +31,15 @@ android {
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.0'
- implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
- implementation 'com.google.android.material:material:1.8.0';
+
+
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+
+ implementation 'com.google.code.gson:gson:2.10.1'
+ implementation 'com.google.android.material:material:1.8.0'
+ implementation 'com.squareup.retrofit2:retrofit:2.9.0'
+ implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d1ed5f6..f4d95bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,8 @@
+
+
wardResponse(@Query("districtCode") int districtCode, @Query("limit") int limit);
+
+ @GET("districts/getByProvince")
+ Call districtResponse(@Query("provinceCode") int provinceCode, @Query("limit") int limit);
+}
diff --git a/app/src/main/java/com/capstone/foodify/DistrictWardResponse/Data.java b/app/src/main/java/com/capstone/foodify/DistrictWardResponse/Data.java
new file mode 100644
index 0000000..1d70605
--- /dev/null
+++ b/app/src/main/java/com/capstone/foodify/DistrictWardResponse/Data.java
@@ -0,0 +1,33 @@
+package com.capstone.foodify.DistrictWardResponse;
+
+import java.util.List;
+
+public class Data {
+ private int nItems;
+ private int nPages;
+ private List data;
+
+ public int getnItems() {
+ return nItems;
+ }
+
+ public void setnItems(int nItems) {
+ this.nItems = nItems;
+ }
+
+ public int getnPages() {
+ return nPages;
+ }
+
+ public void setnPages(int nPages) {
+ this.nPages = nPages;
+ }
+
+ public List getData() {
+ return data;
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+}
diff --git a/app/src/main/java/com/capstone/foodify/DistrictWardResponse/Datas.java b/app/src/main/java/com/capstone/foodify/DistrictWardResponse/Datas.java
new file mode 100644
index 0000000..a83dbbf
--- /dev/null
+++ b/app/src/main/java/com/capstone/foodify/DistrictWardResponse/Datas.java
@@ -0,0 +1,94 @@
+package com.capstone.foodify.DistrictWardResponse;
+
+public class Datas {
+ private String _id;
+ private String name;
+ private String type;
+ private String slug;
+ private String name_with_type;
+ private String path;
+ private String path_with_type;
+ private String code;
+ private String parent_code;
+ private String isDeleted;
+
+ public String get_id() {
+ return _id;
+ }
+
+ public void set_id(String _id) {
+ this._id = _id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getSlug() {
+ return slug;
+ }
+
+ public void setSlug(String slug) {
+ this.slug = slug;
+ }
+
+ public String getName_with_type() {
+ return name_with_type;
+ }
+
+ public void setName_with_type(String name_with_type) {
+ this.name_with_type = name_with_type;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public String getPath_with_type() {
+ return path_with_type;
+ }
+
+ public void setPath_with_type(String paht_with_type) {
+ this.path_with_type = paht_with_type;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getParent_code() {
+ return parent_code;
+ }
+
+ public void setParent_code(String parent_code) {
+ this.parent_code = parent_code;
+ }
+
+ public String getIsDeleted() {
+ return isDeleted;
+ }
+
+ public void setIsDeleted(String isDeleted) {
+ this.isDeleted = isDeleted;
+ }
+}
diff --git a/app/src/main/java/com/capstone/foodify/DistrictWardResponse/DisctrictWardResponse.java b/app/src/main/java/com/capstone/foodify/DistrictWardResponse/DisctrictWardResponse.java
new file mode 100644
index 0000000..f858cfc
--- /dev/null
+++ b/app/src/main/java/com/capstone/foodify/DistrictWardResponse/DisctrictWardResponse.java
@@ -0,0 +1,31 @@
+package com.capstone.foodify.DistrictWardResponse;
+
+public class DisctrictWardResponse {
+ private int exitcode;
+ private Data data;
+ private String message;
+
+ public int getExitcode() {
+ return exitcode;
+ }
+
+ public void setExitcode(int exitcode) {
+ this.exitcode = exitcode;
+ }
+
+ public Data getData() {
+ return data;
+ }
+
+ public void setData(Data data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java b/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java
index b0204da..b07c869 100644
--- a/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java
+++ b/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java
@@ -3,14 +3,13 @@ package com.capstone.foodify.Fragment;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
-
-import androidx.fragment.app.Fragment;
-
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
+import androidx.fragment.app.Fragment;
+
import com.capstone.foodify.R;
import com.capstone.foodify.SignUpActivity;
diff --git a/app/src/main/java/com/capstone/foodify/SignUpActivity.java b/app/src/main/java/com/capstone/foodify/SignUpActivity.java
index 1fdf8fc..4c98bed 100644
--- a/app/src/main/java/com/capstone/foodify/SignUpActivity.java
+++ b/app/src/main/java/com/capstone/foodify/SignUpActivity.java
@@ -9,13 +9,18 @@ import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
+import android.widget.Toast;
+import com.capstone.foodify.API.ApiService;
+import com.capstone.foodify.DistrictWardResponse.Datas;
+import com.capstone.foodify.DistrictWardResponse.DisctrictWardResponse;
import com.google.android.material.textfield.TextInputLayout;
import java.text.SimpleDateFormat;
@@ -25,8 +30,15 @@ import java.util.List;
import java.util.Locale;
import java.util.Objects;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
public class SignUpActivity extends AppCompatActivity {
+ private static final int PROVINCE_CODE = 48;
+ private static final int LIMIT = -1;
+
TextInputLayout textInput_email, textInput_password, textInput_phone,
textInput_address, textInput_repeatPassword, textInput_firstName, textInput_lastName, textInput_birthDay;
final Calendar myCalendar= Calendar.getInstance();
@@ -35,6 +47,13 @@ public class SignUpActivity extends AppCompatActivity {
Spinner wardSpinner, districtSpinner;
ImageView back_image;
+ private static final ArrayList wardList = new ArrayList<>();
+ private static final ArrayList districtList = new ArrayList<>();
+ private static List districtListData = new ArrayList<>();
+ private static List wardListData = new ArrayList<>();
+
+ String selectedDistrict = "";
+
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -43,7 +62,12 @@ public class SignUpActivity extends AppCompatActivity {
setFontUI();
chooseDateOfBirth();
- listWardAndDistrict();
+
+ districtSpinner = (Spinner) findViewById(R.id.district);
+ wardSpinner = (Spinner) findViewById(R.id.ward);
+
+ getListDistrict();
+ getListWard(0);
signIn_textView = (TextView) findViewById(R.id.signIn_textView);
signIn_textView.setOnClickListener(new View.OnClickListener() {
@@ -61,34 +85,99 @@ public class SignUpActivity extends AppCompatActivity {
onBackPressed();
}
});
+
+ districtSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
+ int districtCode = 0;
+
+ selectedDistrict = districtSpinner.getSelectedItem().toString();
+
+ //Get id district from selected item district;
+ for(Datas dataTemp: districtListData){
+ if(selectedDistrict.equals(dataTemp.getName_with_type())){
+ districtCode = Integer.parseInt(dataTemp.getCode());
+ break;
+ }
+ }
+ getListWard(districtCode);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> adapterView) {
+
+ }
+ });
+
}
- private void listWardAndDistrict() {
- wardSpinner = (Spinner) findViewById(R.id.ward);
- districtSpinner = (Spinner) findViewById(R.id.district);
+ private void getListDistrict() {
- ArrayList ward = new ArrayList();
- ArrayList district = new ArrayList();
+ districtList.add("---Quận");
- ward.add("---Phường");
- ward.add("Hoà Hiệp Bắc");
- ward.add("Hòa Khánh Bắc");
- ward.add("Hòa Minh");
- ward.add("Hòa Hiệp Nam");
- ward.add("Hòa Khánh Nam");
+ ApiService.apiService.districtResponse(PROVINCE_CODE, LIMIT).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ DisctrictWardResponse districtResponse = response.body();
+ if(districtResponse != null && districtResponse.getExitcode() == 1){
- district.add("---Quận");
- district.add("Liên Chiểu");
- district.add("Ngũ Hành Sơn");
+ districtListData = districtResponse.getData().getData();
+ for(Datas tempData: districtListData){
+ districtList.add(tempData.getName_with_type());
+ }
+ };
- MySpinnerAdapter adapterWard = new MySpinnerAdapter(getApplicationContext(), android.R.layout.simple_spinner_item, ward);
- MySpinnerAdapter adapterDistrict = new MySpinnerAdapter(getApplicationContext(), android.R.layout.simple_spinner_item, district);
- wardSpinner.setAdapter(adapterWard); // this will set list of values to spinner
- districtSpinner.setAdapter(adapterDistrict); // this will set list of values to spinner
+ setAdapter(districtList, "---Quận", districtSpinner);
+ }
- wardSpinner.setSelection(ward.indexOf("---Phường"));//set selected value in spinner
- districtSpinner.setSelection(district.indexOf("---Quận"));
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Toast.makeText(SignUpActivity.this, "Đã xảy ra lỗi hệ thống. Vui lòng thử lại sau!", Toast.LENGTH_SHORT).show();
+ }
+ });
}
+
+ private void getListWard(int districtCode) {
+
+ if(wardList.size() > 1)
+ wardList.clear();
+
+ if(wardList.size() == 0)
+ wardList.add("---Phường");
+
+ if(districtCode != 0){
+ ApiService.apiService.wardResponse(districtCode, LIMIT).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+
+ DisctrictWardResponse wardResponse = response.body();
+ if(wardResponse != null && wardResponse.getExitcode() == 1){
+
+ wardListData = wardResponse.getData().getData();
+ for(Datas tempData: wardListData){
+ wardList.add(tempData.getName_with_type());
+ }
+ };
+
+ setAdapter(wardList, "---Phường", wardSpinner);
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Toast.makeText(SignUpActivity.this, "Đã xảy ra lỗi hệ thống. Vui lòng thử lại sau!", Toast.LENGTH_SHORT).show();
+ }
+ });
+ } else {
+ setAdapter(wardList, "---Phường", wardSpinner);
+ }
+ }
+
+ private void setAdapter(ArrayList data, String defaultItem, Spinner dataSpinner){
+ MySpinnerAdapter adapterWard = new MySpinnerAdapter(getApplicationContext(), android.R.layout.simple_spinner_item, data);
+ dataSpinner.setAdapter(adapterWard); // this will set list of values to spinner
+ dataSpinner.setSelection(data.indexOf(defaultItem));//set selected value in spinner
+ }
+
private static class MySpinnerAdapter extends ArrayAdapter {
// Initialise custom font, for example:
Typeface font = Typeface.createFromAsset(getContext().getAssets(),
diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml
index ad4591b..e12901c 100644
--- a/app/src/main/res/layout/activity_sign_up.xml
+++ b/app/src/main/res/layout/activity_sign_up.xml
@@ -190,12 +190,14 @@
android:id="@+id/district"
android:layout_width="190dp"
android:layout_height="match_parent"
+ android:textAlignment="viewEnd"
android:layout_marginEnd="12dp"
android:contentDescription="district"
/>