plugins {
id 'com.google.gms.google-services' version '4.3.15' apply false
}
plugins {
id 'com.google.gms.google-services'
}
dependencies {
implementation platform('com.google.firebase:firebase-bom:32.2.3')
implementation("com.google.firebase:firebase-firestore")
}
XML<ex71>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:padding="16dp"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_layout_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="이름">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_layout_age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="나이">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_layout_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="주소">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/btn_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="save"/>
<Button
android:id="@+id/btn_load"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="load"/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="result"
android:textColor="@color/black"
android:textStyle="bold"
android:padding="8dp"/>
<Button
android:id="@+id/btn_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="search data"/>
</LinearLayout>
JAVA
package com.eunji0118.ex71firebasefirestoredatabase;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.eunji0118.ex71firebasefirestoredatabase.databinding.ActivityMainBinding;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding=ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
binding.btnSave.setOnClickListener(view -> clickSave());
binding.btnLoad.setOnClickListener(view -> clickLoad());
binding.btnSearch.setOnClickListener(view -> clickSearch());
}
void clickSave(){
String name = binding.inputLayoutName.getEditText().getText().toString();
int age= Integer.parseInt(binding.inputLayoutAge.getEditText().getText().toString());
String address=binding.inputLayoutAddress.getEditText().getText().toString();
//Firestore DB 관리객체 소환
FirebaseFirestore firebaseFirestore=FirebaseFirestore.getInstance();
//user라는 이름의 컬렉션참조 (RDBMS의)테이블이름 같은 역할 //표이름
CollectionReference userRef= firebaseFirestore.collection("user");
//데이터 넣기
Map<String,Object> user= new HashMap<>();
user.put("name",name);
user.put("age",age);
user.put("address",address);
//.document() 괄호 안에 new Date하면 정렬됨. //////
//도큐먼트 명이 랜덤하게 만들어짐 . document는 RDBNS에 row에 해당함.
userRef.document().set(user).addOnSuccessListener(unused -> {
Toast.makeText(this, "insert success", Toast.LENGTH_SHORT).show();
});
}
void clickLoad(){
FirebaseFirestore firebaseFirestore=FirebaseFirestore.getInstance();
CollectionReference userRef=firebaseFirestore.collection("user");
//비동기 방식임.. 쓰레드 //회사에서 많이씀. //스냅샷 순간사진을 찍음 쿼리스냅샷, 도큐먼트스냅샷
userRef.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
StringBuffer buffer=new StringBuffer();
for (QueryDocumentSnapshot snapshot: queryDocumentSnapshots){
Map<String, Object> user= snapshot.getData();
String name= user.get("name").toString();
int age= Integer.parseInt(user.get("age").toString());
String address=user.get("address").toString();
buffer.append(name+","+age+","+address+"\n");
}
binding.tv.setText(buffer.toString());
}
});
}
void clickSearch(){
//name변수 사용자가 입력한 값
String name=binding.inputLayoutName.getEditText().getText().toString();
FirebaseFirestore firebaseFirestore=FirebaseFirestore.getInstance();
CollectionReference userRef= firebaseFirestore.collection("user");
userRef.whereEqualTo("name",name).addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
StringBuffer buffer=new StringBuffer();
for (QueryDocumentSnapshot snapshot: value){
Map<String,Object> user= snapshot.getData();
String name= user.get("name").toString();
int age=Integer.parseInt(user.get("age").toString());
String address=user.get("address").toString();
buffer.append(name+":"+age+"-"+address+"\n");
}
binding.tv.setText(buffer.toString());
}
});
}
}
'AndroidStudio' 카테고리의 다른 글
Firebase :google 클라우드 백엔드 플랫폼: storage (0) | 2023.09.07 |
---|---|
Firebase : google 클라우드 백엔드 플랫폼 *실시간 채팅창만들기 (0) | 2023.09.07 |
Uri를 절대경로로 바꿔서 리턴시켜주는 메소드 (0) | 2023.09.06 |
웹 서비스 HTTP 통신 : 글씨랑 이미지 둘 다 가져오기* (0) | 2023.09.06 |
웹 서비스 HTTP통신 : 이미지만 올리기* (1) | 2023.09.06 |