본문 바로가기

Android/Firebase

[FireBase] fetch 하는 과정에서의 오류

728x90

문제.

개발하던 도중, fetch 하는 과정에서 제대로 된 값이 들어오지 않아 앱이 죽는 오류가 발생.

fetch는 제대로 완료(onComplete) 되지만, 저장되는 값 자체는 정상적이지 않는 값이 들어옴.


해결방법.

Default 로 저장되는 값을 생성.

onComplete 되더라도 제대로 된 값을 가져오지 않기 때문에, setDefaults을 사용하여 default 값을 설정해 주고 그 값을 사용한다.

 

firebaseRemoteConfig.setDefaults(R.xml.default);

 

해당 선언을 하게되면 값을 제대로 가져오더라도 정상적인 값이 아닐 때 default.xml 을 통해 저장된 기본 값을 가져온다.

 

<?xml version="1.0" encoding="utf-8"?>
<defaultMap>
    <entry>
        <key>key1</key>
        <value>value1</value>
    </entry>
    <entry>
        <key>key2</key>
        <value>value2</value>
    </entry>
</defaultMap>

 

default.xml에는 firebase에서 호출하는 변수 이름을 key 값으로, 그에 해당하는 기본 값을 value로 저장하여 사용한다.

 

위의 해결방법을 사용하면 우선적으로 앱이 죽는 오류는 발생하지 않는다.


fetch를 통해 앱 로컬에 가져온 값을 저장하는데, 저장된 값은 files 폴더에 json 형태로 저장된다.

이 저장하는 json 파일이 타이밍 문제 때문인지 새롭게 받아지지 않고, 이전에 저장된 파일이 존재하기 때문에 그 값을 읽어오려 하지만 잘못된 형태로 값이 저장되어 있어 문제가 발생했던 것이다.

 

그에 따라 파이어베이스에서 fetch 할 때, reset을 선언하여 해당 파일을 지우고 다시 받는 로직을 추가하여 이전의 json 파일에서 정상적이지 않은 값을 가져오지 못하도록 추가한다.

 

firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
firebaseRemoteConfig.reset();

....

// 이후 Setting 작업

 

reset을 호출 할 때는, 반드시 setDefaults, setConfigSettings 보다 먼저 선언해야한다.

728x90