안드로이드에서는 내부 데이터베이스인 SQLITE를 내장하고 있으며, SQLITE를 사용하지 않더라도 백엔드 서버를 통해서 데이터베이스를 구현할 수 있다.
그러나, 학부생 입장에서는 백엔드 서버와 데이터베이스를 구현하기에는 쉽지는 않다.
이 문제를 해결하기 위해 구글에서 제공하는 파이어베이스를 통해서 백엔드서버와 데이터베이스를 구현했다.
이 프로젝트는 제품에 대한 리뷰를 감성분석을 통해서 사용자들에게 보여줄 계획으로 어플리케이션을 개발했다.
어플리케이션을 개발할려고 했던 이유는 당시에 유튜버 뒷광고 논란으로 사회적으로 논란이 있었기 때문에 제품 리뷰에 대한 신뢰성을 머신러닝을 이용해서 얻으면 좋겠다는 생각으로 프로젝트를 시작했다.
노트북 이미지는 Firebase에 저장된 이미지를 불러왔다.
파이어베이스 사용을 위한 설정 및 코드 출처 - 파이어베이스 공식문서
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.google.gms:google-services:4.3.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
dependencies{
implementation 'com.google.firebase:firebase-database:19.5.1'
implementation 'com.google.firebase:firebase-analytics:18.0.0'
implementation 'com.google.firebase:firebase-storage:19.2.0'
}
파이어베이스에서 데이터 검색 후 가져오기
// DB 처리
// 변수 선언
private FirebaseDatabase firebaseDatabase;
private DatabaseReference databaseReference;
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference();
// 어디 테이블에서 들고올지 설정. 이 어플리케이션의 경우는 Notebook - 0 테이블이름을 선택
DatabaseReference Ref = databaseReference.child(this.search).child(this.Name).child("0");
// 실시간 데이터베이스를 사용해서 계속 응답을 받거나 보낼 수 있는 함수와, 한번만 부를 수 있는 함수(SingleValueEvent)가 있다.
// 여기서는 한번만 부르는 SingleValueEvent을 사용함
Ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
// 성공적으로 불러냇으면 이 함수가 실행됨.
ArrayList <String> ar = new ArrayList<>();
ArrayList <String> ar1 = new ArrayList<>();
ArrayList <String> ar2 = new ArrayList<>();
ArrayList <String> ar3 = new ArrayList<>();
bundle = new Bundle();
// 0 테이블의 자식 NegativeReview에 있는 값을 하나식 불러옵니다.
for (DataSnapshot postSnapshot : snapshot.child("NegativeReview").getChildren()) {
ar.add((String)postSnapshot.getValue());
}
// 0 테이블의 자식 NegativeWord에 있는 값을 하나식 불러옵니다.
for (DataSnapshot postSnapshot : snapshot.child("NegativeWord").getChildren()) {
ar2.add((String)postSnapshot.getValue());
}
// arrayList에 있는 값을 번들로 보냄
bundle.putStringArrayList("negative_word", ar2);
bundle.putStringArrayList("negative", ar);
Negative_fr_open = new negative_fragment_open();
Negative_fr_open.setArguments(bundle);
bundle1 = new Bundle();
for (DataSnapshot postSnapshot : snapshot.child("PostiveReview").getChildren()) {
ar1.add((String)postSnapshot.getValue());
}
for (DataSnapshot postSnapshot : snapshot.child("PostiveWord").getChildren()) {
ar3.add((String)postSnapshot.getValue());
}
bundle1.putStringArrayList("positive_word", ar3);
bundle1.putStringArrayList("positive", ar1);
Positive_fr_open = new notebook_positive_1();
Positive_fr_open.setArguments(bundle1);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
// 성공적으로 불러내지 못하면 이 함수가 실행됨
}
});