I am using this approach to fetch data from Firebase and everything working fine, except first time when user install the app it didn't get data, but when app is reopened than everything works fine. The problem I found out is its not calling addListenerForSingleValueEvent
1st time.
Please help me on this it should also fetch data when user install the app for very first time.
private fun fetchData(onComplete: ((Boolean) -> Unit)?=null) {
val database = FirebaseDatabase.getInstance().reference
var ref: DatabaseReference? = null
if (context?.packageName?.contains(".dev") == false) {
ref = database.child("sticker_packs")
} else {
ref = database.child("sticker_packs_devs")
Timber.d("it debug mode")
}
val phoneQuery = ref.orderByChild("identifier")
val firebaseList = ArrayList<StickerPack>()
phoneQuery.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (singleSnapshot in dataSnapshot.children) {
Timber.e(TAG, "onDataChange: ${singleSnapshot.child("stickers").value}")
val stickerPacks: StickerPack? = singleSnapshot.getValue<StickerPack>()
stickerspack = stickerPacks
stickers = stickerPacks
val unzipLocation = "${path}/${stickerPacks?.pack_id}"
if (stickerPacks != null) {
Timber.d("zipfilepath ${stickerPacks.zip_file}")
}
val tryIconPath = "$unzipLocation/try"
val trypath = File(tryIconPath)
val trayFile = trypath.listFiles()
var tryiconImage = ""
trayFile?.forEach {
if (it.name.contains(".png")) {
tryiconImage = it.name
}
Timber.d("try icon g $tryiconImage")
}
stickerPacks?.tray_image_file = tryiconImage
val pkg = "${Package_Head}${PACKAGE_NAME}"
stickerPacks?.publisherEmail = getString(R.string.feedback_email)
stickerPacks?.publisherWebsite = getString(R.string.privacy_policy_link)
stickerPacks?.privacyPolicyWebsite = getString(R.string.privacy_policy_link)
stickerPacks?.licenseAgreementWebsite =
getString(R.string.privacy_policy_link_1)
stickerPacks?.isWhitelisted = true
stickerPacks?.android_play_store_link = pkg
if (stickerPacks != null) {
firebaseList.add(stickerPacks)
}
}
Timber.e(TAG, "onDataChangecache: ${firebaseList.size}")
Timber.e(TAG, "arraylist1: ${firebaseList.size}")
// val getListFromMainActivity=listDataBase
val getListFromMainActivity = Hawk.get("listfromactivity", ArrayList<StickerPack>())
Timber.d("CheckIfNull ${getListFromMainActivity.size}")
if (getListFromMainActivity.isNullOrEmpty() && getListFromMainActivity.size <= 0) {
onComplete?.invoke(false)
}else{
onComplete?.invoke(true)
context?.let {
adapter?.setData(
it, getListFromMainActivity, requireActivity(), this@StickersFragment
)
}
}
Hawk.put("sticker_packs", firebaseList)
view?.linlaHeaderProgress?.visibility = View.GONE
if (view?.linlaHeaderProgress?.visibility == View.GONE) {
//spinnerDialog()
}
Timber.e(TAG, "onDataChe0:$dataSnapshot ")
}
override fun onCancelled(databaseError: DatabaseError) {
Timber.e(TAG, "onCancelled", databaseError.toException())
}
})
}
class StickerPack : Parcelable {
var pack_id: String=""
var pack_Name: String=""
var publisher: String=""
var tray_image_file: String=""
var publisherEmail: String="" //exclude
var publisherWebsite: String="" //exclude
var privacyPolicyWebsite: String="" //exclude
var licenseAgreementWebsite: String="" //exclude
var iosAppStoreLink: String="" //exclude
private var stickers: List<Sticker>? = null
var totalSize: Long = 0
private set
var android_play_store_link: String=""
var isWhitelisted = false //exclude
var animated_sticker_pack:Boolean= false
var zip_file: String?=null
}