728x90
반응형

- 파이어베이스 JSON 형태

 

 

 

 

- 중복 검사 코드

databaseReference.child("Together_group_list").child(Gname_edit.getText().toString()).child("gname").addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                            String value = snapshot.getValue(String.class);

                            if(value!=null){
                                Toast.makeText(getApplicationContext(),"이미 존재하는 그룹명입니다.",Toast.LENGTH_SHORT).show();//토스메세지 출력
                            }
                            else{
                                addGroup(Gname_edit.getText().toString(),Gintro_edit.getText().toString(),Gcate_tv.getText().toString(), goaltime, gmp);
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            // 디비를 가져오던중 에러 발생 시
                            //Log.e("MainActivity", String.valueOf(databaseError.toException())); // 에러문 출력
                        }
                    });

Together_group_list 안에 본인이 입력한 글자(그룹명) 안에 gname 키에서 그룹명을 value에다가 뽑아냅니다.

 

그리고 value가 null과 같지않다면 글자가 있다는것이고, 그것은 해당 그룹이 존재한다는 말이기 때문에 중복됨을 알 수 있습니다. 그래서 "이미 존재하는 그룹명입니다."라고 토스트 메시지를 띄웠습니다.

 

else의 경우는 null이라고 생각하면 됩니다. 그 말은 즉슨, 아직 본인이 입력한 글자의 그룹명이 존재하지 않는다는 것이고, 중복되지 않는다는 말 입니다. 그래서 해당 그룹명을 가진  그룹을 추가해줬습니다.

728x90
반응형
728x90
반응형

1. 참조하는 위치가 더이상 분열되지 않고 끝자리라면

 

username까지 참조해서 "러아니푸"값 하나만을 직접 받아오기

 

 

구동시킬 자바.class

databaseReference.child("User").child(uid).child("username").addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        String value = dataSnapshot.getValue(String.class);
                        uname= value;

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        //Log.e("MainActivity", String.valueOf(databaseError.toException())); // 에러문 출력
                    }
                });

 

 

 

 

 

 

 

 

2. 참조되는 부분 아래로 값이 여러개 있는 경우

 

Together_group_list 아래의 그룹명인 한울을 참조하고있고, 한울 속에있는 속성 여러개를 받아오고 싶을때

 

구동시킬 자바.class

databaseReference.child("Together_group_list").child(Gname).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Together_group_list group = dataSnapshot.getValue(Together_group_list.class);
                
                //각각의 값 받아오기 get어쩌구 함수들은 Together_group_list.class에서 지정한것
                gintro = group.getGintro();
                goaltime = group.getGoaltime();
                gdate = group.getGoalday();
                
                //텍스트뷰에 받아온 문자열 대입하기
                goaltime_tv.setText(goaltime);
                gintro_tv.setText(gintro);
                gdate_tv.setText(gdate);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                //Log.e("MainActivity", String.valueOf(databaseError.toException())); // 에러문 출력
            }
        });

 

Together_group_list.class

package com.example.together.Group;

public class Together_group_list {

    
    //변수 선언
    private String Gname; 
    private String Gintro; 
    private String Goaltime; 
    private String Goalday; 
    private String master;


    
    public Together_group_list(){}
   
   
   
   //여기서부터 get,set 함수를 사용하는데 이부분을 통해 값을 가져옴
    public String getGname() {
        return Gname;
    }

    public void setGname(String Gname) {
        this.Gname = Gname;
    }

    public String getGintro() {
        return Gintro;
    }

    public void setGintro(String Gintro) {
        this.Gintro = Gintro;
    }

    public String getGoaltime() {
        return Goaltime;
    }

    public void setGoaltime(String Goaltime) {
    	this.Goaltime = Goaltime;
    }

    public String getGoalday() {
        return Goalday;
    }

    public void setGoalday(String Goalday) {
        this.Goalday = Goalday;
    }

    public String getmaster() {
        return master;
    }

    public void setmaster(String userId) {
        this.master = master;
    }




    //이거는 그룹을 생성할때 사용하는 부분
    public Together_group_list(String Gname, String Gintro, int GCP, int GAP, String Goaltime, String Goalday, String master) {
        this.Gname = Gname;
        this.Gintro = Gintro;
        this.GCP = GCP;
        this.GAP = GAP;
        this.Goaltime = Goaltime;
        this.Goalday = Goalday;
        this.master = master;

    }



}

 

 

 

 

 

 

3. 정수형을 받아오고 싶은 경우

 

구동시킬 자바.class

databaseReference.child("Together_group_list").child(Gname).child("gap").addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                            int value = (int)snapshot.getValue(Integer.class);//저장된 값을 숫자로 받아오고
                            value +=1;//숫자를 1 증가시켜서
                            databaseReference.child("Together_group_list").child(Gname).child("gap").setValue(value);//저장
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            //Log.e("MainActivity", String.valueOf(databaseError.toException()));
                        }



                    });

 

저장된 값을 받아와서 1증가시키는 코드입니다.

 

파이어베이스는 json형태로 저장되기 때문에 int로 값을 저장했어도 받아올때는 int로 형변환을 해줘야합니다.

 

728x90
반응형
728x90
반응형

파이어베이스 실시간 데이터베이스에 값을 저장하는 예제입니다.

코드 설명은 주석으로 써놨습니다!

 

 

파이어베이스 연동은 아래 링크에서 확인하시길 바랍니다.

https://fjdkslvn.tistory.com/2

 

1. 파이어베이스 생성 및 안드로이드 연동

안녕하세요. 오늘은 안드로이드에 파이어베이스를 연동하는 작업을 해보려고 합니다. 1. 구글 로그인을 하고 프로젝트 만들기 클릭 2. 프로젝트 명을 작성하고 계속 누르고 3. 애널리틱스 구성을

fjdkslvn.tistory.com

 

 

 

 

activity_main.xml

<?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:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit1"
        android:layout_width="match_parent"
        android:layout_height="50dp"></EditText>

    <EditText
        android:id="@+id/edit2"
        android:layout_width="match_parent"
        android:layout_height="50dp"></EditText>


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn"
        android:text="추가하기" />

</LinearLayout>

 

 

 

animal.java (데이터베이스로 값을 저장하기 위해 사용)

package com.example.firebase;

//테이블이라고 생각하고, 테이블에 들어갈 속성값을 넣기
//파이어베이스는 RDBMS와 다르기 때문에 테이블이라는 개념이 없음. 원래는 키값이라고 부름
public class animal {
    String name; //동물 이름
    String kind; //동물 종류

    public animal(){} // 생성자 메서드


    //getter, setter 설정
    public String getname() {
        return name;
    }

    public void setname(String name) {
        this.name = name;
    }

    public String getkind() {
        return kind;
    }

    public void setkind(String kind) {
        this.kind = kind;
    }




    //값을 추가할때 쓰는 함수, MainActivity에서 addanimal함수에서 사용할 것임.
    public animal(String name, String kind){
        this.name = name;
        this.kind = kind;
    }
}

 

 

MainActivity.java

package com.example.firebase;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.Calendar;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

	// 파이어베이스 데이터베이스 연동
    private FirebaseDatabase database = FirebaseDatabase.getInstance();

    //DatabaseReference는 데이터베이스의 특정 위치로 연결하는 거라고 생각하면 된다.
    //현재 연결은 데이터베이스에만 딱 연결해놓고
    //키값(테이블 또는 속성)의 위치 까지는 들어가지는 않은 모습이다.
    private DatabaseReference databaseReference = database.getReference();
    
    Button btn;
    EditText edit1, edit2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.btn); //버튼 아이디 연결
        edit1 = findViewById(R.id.edit1); //동물 이름 적는 곳
        edit2 = findViewById(R.id.edit2); //동물 종류 적는 곳


        //버튼 누르면 값을 저장
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //에딧 텍스트 값을 문자열로 바꾸어 함수에 넣어줍니다.
                addanimal(edit1.getText().toString(),edit2.getText().toString());
            }
        });


    }


    //값을 파이어베이스 Realtime database로 넘기는 함수
    public void addanimal(String name, String kind) {

        //여기에서 직접 변수를 만들어서 값을 직접 넣는것도 가능합니다.
        // ex) 갓 태어난 동물만 입력해서 int age=1; 등을 넣는 경우

        //animal.java에서 선언했던 함수.
        animal animal = new animal(name,kind);

        //child는 해당 키 위치로 이동하는 함수입니다.
        //키가 없는데 "zoo"와 name같이 값을 지정한 경우 자동으로 생성합니다.
        databaseReference.child("zoo").child(name).setValue(animal);

    }
}

 

 

 


 

- 값 저장 시 상위 키값 랜덤으로 지정하는 법 -

더보기

MainActivity.java 에서 addanimal함수 변형

//값을 파이어베이스 Realtime database로 넘기는 함수
    public void addanimal(String name, String kind) {

        //여기에서 직접 변수를 만들어서 값을 직접 넣는것도 가능합니다.
        // ex) 갓 태어난 동물만 입력해서 int age=1; 등을 넣는 경우

        //animal.java에서 선언했던 함수.
        animal animal = new animal(name,kind);

        //push()는 값을 넣을때 상위 키값을 랜덤으로 설정해 주는 함수입니다.
        //채팅기능을 만들때 사용하면 좋습니다.
        databaseReference.child("zoo").push().setValue(animal);

    }

 

값을 넣을때 상위 키값을 랜덤으로 지정하도록 push()로 설정한 모습입니다.

키값을 랜덤으로 넣고싶거나, 채팅과 같은 계속해서 추가되는 값에 사용하면 좋습니다.

 

 

 

-변형 코드 결과 모습-

 

 

 

 

 

수고하셨습니다.

728x90
반응형
728x90
반응형

안녕하세요.  오늘은 안드로이드에 파이어베이스를 연동하는 작업을 해보려고 합니다.

 

 

 

1. 구글 로그인을 하고 프로젝트 만들기 클릭

 

 

 

 

 

 

 

 

2. 프로젝트 명을 작성하고 계속 누르고

 

 

 

 

 

 

 

3. 애널리틱스 구성을 사진과 같이 선택해주고 프로젝트 만들기

 

 

 

 

 

 

4. 프로젝트가 만들어지면 앱을 추가하여 시작하기에서 원하는 걸 누르면 된다, ex) android

 

 

 

 

 

 

5. 앱 등록을 위해 패키지 명을 입력해줍니다. (나머지도 입력해주면 좋습니다.)

 

 

 

 

* 패키지명 보는 법프로젝트 보면 자바 맨 위에! *

 

 

 

 

 

 

* 디버그 서명 인증서 확인하기 *

 

코끼리 누르고 -> 프로젝트 파일-> Tasks -> android -> signingReport를 누르면!

 

 

 

 

밑에 이렇게 뜹니다. SHA1, SHA-256을 인증서로 쓰는것같습니다.

여기서는 SHA1복사해주세요.

 

 

 

 

 

 

 

 

6. 다음은 json 파일을 프로젝트 파일에 직접 넣습니다.

 

 

 

 

파일을 편하게 보기위해 왼쪽 위에서 상자를 열고 Project Files로 넘어갑니다.

 

 

 

json파일을 드래그하여 app위에 올려주면 app의 하단으로 들어갑니다.

 

 

 

 

7. 다음은 Firebase SDK를 추가해주는 과정입니다. 그냥 보면서 직접 추가하시면 됩니다.

 

 

 

 

코끼리 2개에 각각 써주시고 Sync now 누르시면 됩니다.

 

*build.gradle(Module)쪽에서 apply plugin 넣을 때,

plug{ }가 있어도 이 안에 넣지말고 밖에다가 넣어줘야지 동작합니다.*

 

 

 

 

 

 

 

 

8. 여기까지 잘 따라오셨으면 일단 정상적으로 파이어베이스가 연동되어있을 겁니다.

 

 

 

 

 

 

 

9. Realtime Database 규칙 설정하기

 

Realtime Database를 눌러서 활성화 시키고, 규칙에 들어와서 아무거나 누른 후 코드를 이렇게 수정해줍니다.

 

이렇게 수정해야 개발할때 편하게 접근할 수 있습니다. 배포할때는 유의해야겠습니다.

 

 

 

10. 안드로이드와 잘 연동되었는지 확인해봅시다.

 

Tools -> Firebase를 들어갑니다.

 

 

 

 

그러면 우측에 파이어베이스가 뜰것이고.. 한번 Realtime Database를 눌러 파란글씨로 들어가봅시다.

(Realtime Database가 꼭 아니여도 괜찮습니다.)

 

 

 

 

아마 여러분은 잘 따라오셨다면 1번만 초록글씨가 나와있을겁니다.

(1번이 활성화가 되어있지 않다면, 방금 한 작업중 오류가 있었던 것 입니다. json파일의 위치가 app하단으로 잘 들어갔는지 확인하시고, SDK 코드 입력한것에 오타가 없는지 확인해보시기 바랍니다.)

 

2번까지 활성화를 시켜야하는데 'Add the Realtime Database SDK to your app'을 눌러줍니다.

 

 

'Accept Changes'까지 눌러주시면 끝납니다!

 

 

 

 

 

11. 파이어베이스 실시간 데이터베이스를 사용하기 위해 코드 추가

 

AndroidManifest.xml에 인터넷 권한을 허용하는 코드를 작성해줍니다.

<uses-permission android:name="android.permission.INTERNET"/>

 

 

 

수고하셨습니다.

728x90
반응형

+ Recent posts