이전 글 : https://kmyobin.tistory.com/75
Spring boot <-> MySQL 연동하기
spring boot 작업 환경 : intellij mysql 작업 환경 : mysql workbench https://www.youtube.com/c/GenuineCoder Genuine Coder This channel is dedicated to those who love and enjoy computer programming. A..
kmyobin.tistory.com
Spring boot와 MySQL을 연동했습니다. 이제 Android와 연결해보겠습니다.
1. 기본 설정하기
먼저 build.gradle에 dependencies를 추가합니다.
plugins {
id 'com.android.application'
}
android {
compileSdk 32
defaultConfig {
applicationId "org.techtown.spring_mysql_ex"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures{
viewBinding true
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
// https://mvnrepository.com/artifact/com.squareup.retrofit2/converter-gson
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
// https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
}
retrofit2를 추가해준 모습입니다.
AndroidManifest.xml 파일로 가서 추가로 usus-permission을 작성합니다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
애플리케이션 안에서 네트워크 연결을 하기 위해서는 위와 같은 작업이 필요합니다.
또한 application 안에
android:usesCleartextTraffic="true"
를 적어줍니다.
2. activity_main.xml 작성하기
저의 User 변수는 총 4개였습니다. [id, password, name, age]
Android Studio에서 activity_main.xml을 아래와 같이 간단하게 만들어줬습니다.

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="25dp"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/form_textFieldID"
android:layout_marginBottom="5dp"
android:hint="@string/form_ID"/>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/form_textFieldPassword"
android:layout_marginBottom="5dp"
android:hint="@string/form_password"/>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/form_textFieldName"
android:layout_marginBottom="5dp"
android:hint="@string/form_name"/>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/form_textFieldAge"
android:layout_marginBottom="5dp"
android:hint="@string/form_age"/>
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/button_save_user"
android:id="@+id/form_buttonSave"
android:minHeight="60dp">
</com.google.android.material.button.MaterialButton>
</RelativeLayout>
form_textFieldID, form_textFieldPassword, form_textFieldName, form_textFieldAge로
id, password, name, age를 입력받았습니다.
아래에는 button을 넣어주었습니다. id는 form_buttonSave입니다.
각각 android:text 보시면 @string/~ 형식으로 작성되어있죠?

strings.xml 여기로 이동해줍니다.
<resources>
<string name="app_name">spring-mysql_ex</string>
<string name="form_ID">id</string>
<string name="form_password">password</string>
<string name="form_name">name</string>
<string name="form_age">age</string>
<string name="button_save_user">save</string>
</resources>
위의 코드를 작성합니다.
실제로 화면에 보여지는 건 id, password, name, age, save인 것을 알 수 있습니다.
3. User class, RetrofitService, UerAPI 작성하기

먼저 완성된 모습입니다.
일단 mysql database에서 만들었던 변수를 안드로이드에서도 만듭니다.
3-1. model package
model package를 생성하고 그 안에 User class를 생성합니다.
package org.techtown.spring_mysql_ex.model;
public class User {
private String id;
private String password;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3-2. retrofit package
retrofit package를 생성합니다.
그 안에 RetrofitService class와 UserAPI interface를 생성합니다.
먼저 RetrofitService입니다. 여기서는 Retrofit을 초기화하는 작업을 합니다.
package org.techtown.spring_mysql_ex.retrofit;
import com.google.gson.Gson;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitService {
private Retrofit retrofit;
public RetrofitService(){
initializeRetrofit();
}
private void initializeRetrofit(){
retrofit=new Retrofit.Builder()
.baseUrl("http://내 IP 주소:8080")
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
}
public Retrofit getRetrofit(){
return retrofit;
}
}
내 IP주소는 cmd 창으로 가서 ipconfig 명령어로 알 수 있습니다.

다음은 UserAPI interface입니다. 일단 @GET, @POST 2개만 만들어줍니다.
package org.techtown.spring_mysql_ex.retrofit;
import org.techtown.spring_mysql_ex.model.User;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
public interface UserAPI {
@GET("/user/get-all") // 다 갖고 오기
Call<List<User>> getAllUsers();
@POST("/user/save") // 저장하기
Call<User> save(@Body User user);
}
이건 spring boot에서 만들었던 UserController와 연결됩니다.

4. MainAcitivity 작성하기
이제 MainActivity를 작성합니다.
activity_main.xml에서 입력받은 4개의 변수를 save 함수를 이용하여 POST 합니다.
package org.techtown.spring_mysql_ex;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputEditText;
import org.techtown.spring_mysql_ex.model.User;
import org.techtown.spring_mysql_ex.retrofit.RetrofitService;
import org.techtown.spring_mysql_ex.retrofit.UserAPI;
import java.util.logging.Level;
import java.util.logging.Logger;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeComponents();
}
private void initializeComponents(){
TextInputEditText inputEditID=findViewById(R.id.form_textFieldID);
TextInputEditText inputEditPassword=findViewById(R.id.form_textFieldPassword);
TextInputEditText inputEditName=findViewById(R.id.form_textFieldName);
TextInputEditText inputEditAge=findViewById(R.id.form_textFieldAge);
MaterialButton buttonSave=findViewById(R.id.form_buttonSave);
RetrofitService retrofitService=new RetrofitService();
UserAPI userAPI=retrofitService.getRetrofit().create(UserAPI.class);
buttonSave.setOnClickListener(view -> {
String id = String.valueOf(inputEditID.getText());
String password = String.valueOf(inputEditPassword.getText());
String name = String.valueOf(inputEditName.getText());
int age = Integer.parseInt(String.valueOf(inputEditAge.getText())); // int라서 다르게 받았음
User user=new User();
user.setId(id);
user.setPassword(password);
user.setName(name);
user.setAge(age);
userAPI.save(user)
.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) { // 저장이 되었다면
Toast.makeText(MainActivity.this, "Save Success", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<User> call, Throwable t) { // 저장이 실패했다면
Toast.makeText(MainActivity.this, "Save failed", Toast.LENGTH_LONG).show();
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, "Error occurred", t);
}
});
});
}
}
age는 int이기 때문에 Integer.parseInt를 이용하여 int로 변환하였습니다.
안드로이드에서는 기본적으로 입력을 String으로 받기 때문입니다.
5. 실습하기
데이터를 넣어보겠습니다.
Spring boot 서버를 키고, 안드로이드 앱을 실행합니다.


Save Success가 떴습니다.
mysql workbench를 이용하여 값이 들어왔는지 확인합니다.

성공적으로 들어왔습니다.
다음 글 : https://kmyobin.tistory.com/77?category=1105100
Spring boot <-> Android 연동하기 (2) MySQL에 있는 모든 데이터를 가져와서 Android 앱에 출력하기
이전 글 : https://kmyobin.tistory.com/76 Android 연동하기 (1) 데이터 넣고 확인하기" data-og-description="이전 글 : https://kmyobin.tistory.com/75 MySQL 연동하기" data-og-description="spring boot 작..
kmyobin.tistory.com
'SPRING BOOT' 카테고리의 다른 글
Amazon S3 <-> Spring boot 연동하기 : bucket에 있는 객체 불러오기 (0) | 2022.11.20 |
---|---|
Spring boot <-> Android 연동하기 (3) FAB 추가하여 data 등록 창 띄우기 (0) | 2022.10.09 |
Spring boot <-> Android 연동하기 (2) MySQL에 있는 모든 데이터를 가져와서 Android 앱에 출력하기 (0) | 2022.10.09 |
Spring boot <-> MySQL 연동하기 (0) | 2022.10.08 |
댓글