728x90
반응형

 

 

카톡이나 인스타그램 같은 앱을 보시면 하단에 탭 버튼이 있어, 각 탭을 눌러서 화면을 이동할 수 있도록 되어있습니다.

 

만약 옆으로 밀어서 화면이 넘어가는 탭을 만들고 싶다면 '뷰클리퍼'를 사용할 수 있습니다.

 

 

 

 

탭 호스트는 탭 버튼에 맞는 화면을 갈아끼울 수 있는 장소라고 생각하시면 됩니다.

 

각 버튼에 맞는 화면은 1개씩만 지정이 가능하고 사진을 연결할 수도 있고,

xml을 따로 연결할 수도 있어서 각 탭 버튼에 맞는 화면 구현이 가능합니다.

 

각 탭버튼마다 xml을 연결한다면, 필요한 xml의 개수는 4개 입니다.

 

탭 호스트 xml 1개, 각 화면에 맞는 xml 3개!

 

 

 

 

 

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">

<TabHost
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@android:id/tabhost">

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@android:id/tabcontent">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tab_study"
android:orientation="vertical" ></LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/tab_time"></LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/tab_group"></LinearLayout>

</FrameLayout>



<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"></TabWidget>


</LinearLayout>


</TabHost>

</LinearLayout>

프레임 레이아웃 안쪽 리니어 레이아웃이 3개가 있습니다.

이 리니어 레이아웃의 개수가 버튼의 개수라고 생각하시면 됩니다.

 

만약 탭 버튼들이 하단이 아니라 상단에 위치하는것을 원하신다면 탭위젯을 프레임레이아웃 바로 위로 올려주시면 됩니다.

 

 

 

 

 

 

 

MainActivity.java

package com.example.together;


import androidx.appcompat.app.AppCompatActivity;
import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;



@SuppressWarnings("deprecation") //이거 있어야 합니다.

public class MainActivity extends TabActivity {



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


TabHost tabHost = getTabHost(); //탭 호스트 객체 생성

// 탭스팩 선언하고, 탭의 내부 명칭, 탭에 출력될 글 작성
TabHost.TabSpec spec;
Intent intent; //객체




//탭에서 액티비티를 사용할 수 있도록 인텐트 생성
intent = new Intent().setClass(this, Study.class);
spec = tabHost.newTabSpec("Study"); // 객체를 생성
spec.setIndicator("공부하기"); //탭의 이름 설정
spec.setContent(intent);
tabHost.addTab(spec);



//탭에서 액티비티를 사용할 수 있도록 인텐트 생성
intent = new Intent().setClass(this, Time.class);
spec = tabHost.newTabSpec("Time"); // 객체를 생성
spec.setIndicator("통계"); //탭의 이름 설정
spec.setContent(intent);
tabHost.addTab(spec);



//탭에서 액티비티를 사용할 수 있도록 인텐트 생성
intent = new Intent().setClass(this, Together_home.class);
spec = tabHost.newTabSpec("Together_home"); // 객체를 생성
spec.setIndicator("그룹"); //탭의 이름 설정
spec.setContent(intent);
tabHost.addTab(spec);



tabHost.setCurrentTab(0); //먼저 열릴 탭을 선택! (2)로 해두면 그룹이 시작 화면!


}

}

각 탭에 맞는 xml이 연결될 수 있도록 자바코드를 작성해줍니다. xml에 맞는 java파일을 꼭 만드셔야해요.

 

intent = new Intent().setClass(this, Together_home.class); 이 부분이 각 탭에 맞는 화면이 나올 수 있도록 인텐트 하는 부분입니다.

 

 

 

 

Together_home.java

package com.example.together;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;



public class Together_home extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.together_home); //xml연결



}

}

그룹 버튼을 눌렀을떄 연결되는 자바파일 입니다. xml과 연결되어 있어야 합니다.

 

새로운 자바파일을 추가했으면, Manifest에 추가하는거 잊지 마시길 바랍니다.

 

 

 

 

 

 

 

결과 화면

 

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
반응형

일단 로그인을 성공하시면 Authentication -> user에 로그인 한 구글 아이디가 떠야합니다.

(Authentication의 활성화가 안되신분들은 시작하기 버튼 눌러주시면 됩니다)

 

 

 

 


뜨지 않는다면 구글 로그인 연동에 관련된 기본적인 설정 부분 부터 확인해봅시다.

 

 

 

1. 로그인 필수요소인 SHA1 설정 확인

 

 

본인은 파이어베이스 연동으로 구글로그인이 되는데, 팀원들은 로그인이 안되는 경우에 도움이 될 수 있습니다.

 

연동한 앱을 누르고 톱니바퀴(설정)을 들어갑니다.

 

 

 

 

 

지원 이메일을 적어줍니다. 본인 이메일 아무거나 적어주세요.

 

 

 

 

밑으로 내리시면 'SDK 설정 및 구성'이 있는데 디지털 지문 추가를 눌러서 SHA1을 추가해줍니다.

=> 이 디지털 지문은 각 컴퓨터 환경마다 다른 것 같습니다. SHA1을 확인하고 넣은 컴퓨터만 로그인이 됩니다.

프로젝트를 진행할 경우 팀원들 모두 SHA1를 각자 확인하여 넣어야 로그인 할 수 있습니다.

네명이 프로젝트를 진행한다면 SHA1이 4개가 들어가야겠죠?

 

 

[SHA1 확인하는 방법] 링크를 따라 들어가시고 5번을 확인하시길 바랍니다.

https://fjdkslvn.tistory.com/2

 

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

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

fjdkslvn.tistory.com

 

 

 

 

 

2. 파이어베이스 Authentication -> Sign-in method 에서 이메일/비빌번호와 Google 부분을 활성화

1번에서 말씀드린 '지원이메일'과 'SHA1'을 안넣으면 구글 활성화를 못합니다.

 

 

 

 

 

 

3.  AndroidManifest에 인터넷 권한을 허용하는 코드가 들어있는지 확인

 

 

 

 

 

 

4. 로그인 오픈소스를 사용하는데 GoogleSignIn 또는 Google들어간 부분들이 다 빨간색으로 오류가 나는 경우

 

onActivityResult 함수 내부의 GoogleSignin에도 오류가 있다면, 이걸 눌렀을 때 나오는 해결방법인 add ~~를 합니다.

 

그러면 위쪽에 있는 Google관련 오류가 싹 다 해결됩니다.

 

 

 

 

 

5. requestIdToken에서 default_web_client_id에 오류가 난다면

 

 

 

파일 형식을 Project로 변환합니다.

 

 

app -> build -> generated -> res -> google-services -> debug -> values -> values.xml로 들어갑니다.

(build는 앱을 한번 실행해야 생깁니다. build가 없다고 당황하지마세요.)

 

default_web_client_id 오른쪽에 아주 긴 문장이 있을텐데, 그걸 복사하세요.

<string name="default_web_client_id" translatable="false">여기에 있는것을 복사</string>

 

 

 

그리고 자바 파일로 돌아와서 큰따옴표 안에 넣어주시면 됩니다.

 

 


여태까지 제가 겪었던 로그인 오류 해결 방법을 소개해드렸습니다.

 

로그인 후 다음 화면으로 넘어가는 작업이 잘 안되시는 경우.. intent를 어디에 넣었는지 잘 확인하시길 바랍니다.

 

728x90
반응형
728x90
반응형

누군가 올려둔 안드로이드 파일을 다운로드 받았을 때, 오류가 나는 경우가 있습니다.

 

(본인이 전에 잘 쓰던 파일도 오류가 날 수 있습니다)

 

 

분명 파일 주인은 파일 실행에 아무 문제가 없다고 하지만....

 

본인만 빨간줄이 생겨있거나 파일 형식에 안드로이드가 없는 경우 등에 도움이 될 수 있습니다.

 

 

 

-예상 원인-

  • 컴퓨터가 느려서 로딩이 덜 됐을 경우 (기다리면 해결 됨)
  • 캐시 오류
  • Sync가 정상적으로 처리되지 않음
  • 안드로이드 스튜디오 버전이 최신이 아님

 

 

 

 

 

 

 

-해결 방안-

일단 로딩이 덜 되어서 이 글까지 찾아보러 오신거면 컴퓨터를 바꾸시는게 좋을지도 모릅니다.

자신의 참을성의 한계까지 기다려봅시다..

 

 

로딩 문제가 아닌것같다면 이제 하나씩 따라해봅시다.

 

1. Invalidate Caches / Restart

File -> Invalidate Caches / Restart 를 누르면

 

이 화면이 나올텐데요. 파란 버튼을 눌러줍니다.

 

 

 

 

 

 

 

2. Sync Project with Gradle Files

 

해결이 안되셨나보군요. 이번에는 Sync를 해줍시다.

(저는 그냥 문제있으면 Sync부터 눌러보긴 합니다. 제일 만만하거든요)

 

오른쪽 상단을 보시면 코끼리가 있을겁니다. 이걸 눌러주세요.

 

 

File -> Sync Project with Gradle Files를 눌러주시는 것도 같은 방법입니다.

 

 

 

 

 

3. 안드로이드 스튜디오 업데이트 하기

 

아직도 해결이 안되셨으면.. 저와 같은 상황이였을지도 모르겠네요.

 

업데이트 합시다.

 

 

Tools -> SDK Manager 로 들어가줍니다.

 

 

System Settings -> Updates를 눌러주세요. (사진상 현재 위치의 바로 위에있는 부분입니다)

 

 

Stable Channel로 바꿔주시고 하단의 OK버튼을 눌러주시면 됩니다.

 

(저는 처음에 Beta Channel로 업데이트 했다가 슬픔을 경험해 본 적이 있으니.. 유의하시기 바랍니다)

 

 

 

 


이래도 해결이 안되신 분들은.... 다른 방법을..!

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