Firbase 의 Storage 사용 중 발생한 오류입니다.

 

문제가 발생한 이유는 Storage 에 권한이 없기 때문인데,

 

Storage - Rules 에 다음 코드를 입력해주면 됩니다.

 

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

 

< 해결완료 >

발생한 오류는 다음과 같습니다.

 

1. layout 요소를 id 로 가져온후 BoardModel 에 get 함수로 텍스트를 넣어준다.

TextView tv_uid = (TextView) convertView.findViewById(R.id.tv_time);
tv_uid.setText(BoardModel.getUid());

 

2. BoardModel 의 멤버와 메서드들이 모두 static 으로 선언되어 있습니다.

public static String uid = "";

 

[ 해결 방법 ]

1. static 을 제거 후 모두 public 으로 선언해줍니다.

2. BoardModel.getUid() 와 같이 클래스에 직접 접근하지말고, 객체로 생성 후 접근해줍니다.

BoardModel boardModel;
TextView tv_uid = (TextView) convertView.findViewById(R.id.tv_time);
tv_uid.setText(boardModel.getUid());

 

-> 해결 완료

생성자가 정의되지 않아서 생기는 문제였습니다.

 

아래와 같이 인수와 피라미터가 없는 생성자를 추가해주면 해결됩니다.

 

public BoardModel() { // 새로추가
        
}

public BoardModel(String title, String content, String uid, String time) {
        this.title = title;
        this.content = content;
        this.uid = uid;
        this.time = time;
}

 

 

 

 

관련 링크 : https://stackoverflow.com/questions/47706601/users-does-not-define-no-argument-constructor

Fragment 란?

Activity 개념과 View 개념이 합쳐진 것이라고 할 수 있습니다.

 

  • View : Activity 위에 놓이는 layout 이나 Button 같은 그림들
  • Activity : View 를 올릴 수 있는 도화지
  • Fragment : Activity 라는 도화지 위에 얹는 도화지 느낌

 

Fragment 를 왜 사용할까요?

Activity 를 변경하지 않고, Fragment 를 변경하는 것만으로도 Activity 위에 보이는 view 를 손쉽게 변경 가능합니다.

 

 

Fragment 주된 특징

  • Activity 를 분할하여 화면의 한 부분을 정의
  • 액티비티와 같이 레이아웃, 동작처리 ,생명주기를 가지는 독립적인 모듈
  • 다른 액티비티에서도 사용할 수 있어 재사용성이 뛰어남
  • 액티비티 내에서 실행 중 추가/제거가 가능합니다.
  • 프래그먼트는 필수적으로 하나의 액티비티에 종속되어야 합니다.

 

 

Fragment 생명주기

생명주기를 지키지 않는다면 메모리 누출 또는 비정상 종료가 발생할 수 있습니다.

  • onCreate()

프래그먼트를 생성할 때 호출됩니다.

프래그먼트가 일시정지 혹은 중단 후 재개되었을 때 유지하고 있어야하는 것을 여기서 초기화해야합니다.

프래그먼트를 생성하면서 넘겨준 값들이 있다면, 여기서 변수에 넣어주면 됩니다. 하지만 여기서는 UI 초기화는 못합니다.

 

  • onCreateView()

프래그먼트가 자신의 인터페이스를 처음 그리기 위해 호출합니다.

View 를 반환해야 합니다. 그래서 버튼이나 텍스트 뷰 등을 초기화 할 수 있습니다.

이 메서드는 프래그먼트의 레이아웃 루트이기 때문에 UI 를 제공하지 않는 경우 null 을 반환합니다.

 

  • onPause()

사용자가 프래그먼트를 떠나면 첫번째로 이 메서드를 호출합니다.

예를 들어, 홈 버튼을 눌러 화면에서 벗어나게 되면 이 메서드가 호출됩니다.

그래서 프래그먼트의 부모 액티비티가 아닌, 다른 액티비티가 foreground 로 나오게 되면, onPause 를 콜하고 backstack 으로 들어감

 

 

  • onStart()

액티비티가 시작됨 상태에 들어가면 이 메서드를 호출합니다.

사용자에게 프래그먼트가 보이게 되고, 이 메서드에서 UI 를 관리하는 코드를 초기화합니다.

이 메서드가 완료되면 Resumed 상태로 들어가 onResume() 을 호출합니다.

 

 

  • onResume()

이 상태에 들어갔을 때 사용자와 상호작용 합니다.

어떤 이벤트가 발생하여 포커스가 떠날 때까지 이 상태에 머무릅니다.

프로그램이 일시 정지되어 onPause() 를 호출하고 다시 재게되면 onResume() 메서드를 호출합니다.

즉, 유저에게 프래그먼트가 보여지고 상호작용 직전에 호출되는 함수입니다.

 

  • onStop()

다른 액티비티가 완전히 화면을 가리게 되면 호출합니다.

여기에 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있습니다.

유저가 다시 해당 액티비티를 호출하면 다시 복원할 수 있는 상태입니다.

One or more issues found when checking AAR metadata values: [ 에러 ]

안드로이드 SDK 버전이 30이 넘어가면서 발생하고 있는 여러 오류 중 하나입니다.

 

[ build.gradle ] ->

[ dependency ] 내부를 부면 appcompat:appcompat:1.5.0 ~~ 으로 되있을 겁니다.

 

implementation 'androidx.appcompat:appcompat:1.3.0' 으로 수정해줍니다.

 

 

+ Recent posts