-
Notifications
You must be signed in to change notification settings - Fork 0
MainActivity Old
Kokoichi edited this page Sep 26, 2021
·
2 revisions
Picasso.get().load(imgUrl).fetch()
// TODO: ここも API から持ってくる
val memberNames = listOf<String>(
"iwamotorenka",
// "akimotomanatsu",
// "suzukiayane",
// "tsutsuiayame",
// "kitanohinako",
// "yakubomio",
// "yumikinao",
// "tamuramayu",
// "endousakura",
)
val dbHelper = MemberInfoAPI()
membersFromStorage = mutableListOf<Member>() // 初期化する
for (memberName in memberNames) {
Log.d("MainActivity", memberName);
// val userInfo = dbHelper.downloadMemberInfo(memberName)
var userInfo = downloadMemberInfo(memberName)
Log.d("MainActivity", userInfo.toString());
// var member = Member(
// name = userInfo?.nameEn!!,
// name_ja = userInfo.nameJa,
// birthday = userInfo?.birthday,
// imgUrl = userInfo.imgUrl,
// )
// var member = Member(
// name = userInfo?.nameEn!!,
// imgUrl = userInfo.imgUrl,
// )
// membersFromStorage.add(member)
}
Picasso.get()
.load(imgUrl)
.placeholder(R.drawable.profile_picture)
.into(object : CustomTarget<Bitmap>(){
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
imageView.setImageBitmap(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
// this is called when imageView is cleared on lifecycle call or for
// some other reason.
// if you are referencing the bitmap somewhere else too other than this imageView
// clear it here as you can no longer have the bitmap
}
})
// あらかじめキャッシュしておく
for (imageUrl in userImageList.images) {
Picasso.get().load(imageUrl).fetch()
}
// TODO: group 名を格納する enum か何かを作る
// TODO: WorkerThread で thread を止める処理は、数が多すぎたら良くない?
// 非同期的に動く get に対応するため、戻り値を変更
// memberに直接追加することにする!
suspend fun <T> Task<T>.toSuspendable(): T {
return suspendCoroutine { cont ->
this.addOnCompleteListener { task ->
if (task.isSuccessful) {
cont.resume(task.result!!)
} else if (task.isCanceled) {
cont.resumeWithException(CancellationException())
} else {
cont.resumeWithException(task.exception ?: Exception("Unknown"))
}
}
}
}
suspend fun downloader(groupName: String): MutableList<Member> {
var memberListFromStorage = mutableListOf<Member>()
// GlobalScope.launch(Dispatchers.IO) {
// runBlocking {
val db = Firebase.firestore
// var memberListFromStorage = mutableListOf<Member>() // 初期化する
// .whereEqualTo("capital", true)
var job = GlobalScope.launch(Dispatchers.IO) {
val querySnapshot = db.collection(groupName)
.get().toSuspendable()
Log.d("checker3", querySnapshot.toString())
for (document in querySnapshot) {
Log.d("checker3", document.id + " => " + document.data)
// TODO: メンバーリストに追加する
val userInfo = document.toObject(MemberPayload::class.java)
Log.d("MainActivity", "response is $userInfo")
var member = Member(
name = userInfo?.name_en!!,
name_ja = userInfo.name_ja,
birthday = userInfo?.birthday,
imgUrl = userInfo.img_url,
)
Log.d("MainActivity", userInfo.toString())
memberListFromStorage.add(member)
}
Log.d("checker3", "downloader finished")
memberListFromStorage
}
// return@launch memberListFromStorage
job.join()
return memberListFromStorage
}
suspend fun downloadMemberInfos(groupName: String){
// TODO: ここも API から持ってくる
val memberNames = listOf<String>(
"iwamotorenka",
"akimotomanatsu",
"suzukiayane",
// "tsutsuiayame",
// "kitanohinako",
// "yakubomio",
// "yumikinao",
// "tamuramayu",
// "endousakura",
)
membersFromStorage = mutableListOf<Member>() // 初期化する
val db = Firebase.firestore
// var hoge = CoroutineScope(Dispatchers.IO).async {
for (memberName in memberNames) {
Log.d("MainActivity", memberName);
// KotFirestore
val res = null
db.collection(groupName).document(memberName).get()
.addOnSuccessListener { document ->
// val userImageList = document.toObject(UserImageList::class.java)
// レスポンスのデータを、今ある class にバインドするイメージ
Log.d("MainActivity", document.toString())
val userInfo = document.toObject(MemberPayload::class.java)
// val res = document.toObject<MemberPayload>
Log.d("MainActivity", "Member name is $memberName:")
Log.d("MainActivity", "response is $userInfo")
var member = Member(
name = userInfo?.name_en!!,
name_ja = userInfo.name_ja,
birthday = userInfo?.birthday,
imgUrl = userInfo.img_url,
)
Log.d("MainActivity", userInfo.toString())
membersFromStorage.add(member)
if (memberName == memberNames[memberNames.size - 1]) {
Log.d("checker2", "Num of membersFromStorage is " + membersFromStorage.size)
// Log.d("checker2", membersFromStorage.toString())
Log.d("checker2", "Return from downloadInfo")
}
}.addOnFailureListener { exception ->
Log.e("checker2", "Exception when retrieving all members infos", exception)
}
}
Log.d(
"checker",
"[Just Before of Returns] Num of membersFromStorage is " + membersFromStorage.size
)
Log.d("checker2", "Return from downloadInfo")
// return membersFromStorage
}
// Mock For Development
val mockMembers = arrayOf<Member>(
Member(name = "renka", name_ja = "renka", birthday = "2004/02/02"),
Member(name = "manatsu", name_ja = "renka", birthday = "1993/08/20"),
Member(name = "ayame", name_ja = "renka", birthday = "2004/06/08"),
Member(name = "ayane", name_ja = "renka", birthday = "1999/03/05"),
Member(name = "hinako", name_ja = "renka", birthday = "1996/07/17"),
Member(name = "mio", name_ja = "renka", birthday = "2002/08/14"),
Member(name = "nao", name_ja = "renka", birthday = "1999/02/03"),
Member(name = "mayu", name_ja = "renka", birthday = "1999/01/12"),
Member(name = "sakura", name_ja = "renka", birthday = "1999/10/03"),
)