October 08, 2020
내가 좋아하는 게임인 로스트아크 유저검색앱을 만들어보고싶었는데 해당 게임사에서 API를 공개하지 않더라..
그런데, 전투정보실 네트워크에서 요청하는 주소를 그대로 사용해보니, 완성된 View파일을 가져오는데 잘만 조리하면.. 필요한 데이터를 뽑을수 있을것 같아, JS로 먼저 실험해봤는데, 잘 된다!
이미 로아와 라는 훌륭한 웹앱이 있고, 만드신 개발자께서 웹뷰로 모바일 앱도 구현해놓으신것 같다. 그래도 재미있을거 같으니 도전!
fun searchClickEvent(){
CoroutineScope(Dispatchers.IO).launch {
getUserData(et_value.text.toString())
}
}
suspend fun getUserData(editTextVal: String) {
val scopeManager = ScopeManager()
val userData = scopeManager.HttpRequest(editTextVal)
parentFragmentManager.beginTransaction().replace(R.id.frame_changingFrame, UserInfoFragment.newInstance(userData)).commit()
}
class ScopeManager {
private val mainScope = CoroutineScope(Dispatchers.Default)
fun destroy(){
mainScope.cancel()
}
suspend fun HttpRequest(_val : String) : SendingData {
val editTextVal = URLEncoder.encode("${_val}", "UTF-8")
val httpResult = getHttp(editTextVal)
return mainScope.async {
val userEquipResult = getUserEquip(httpResult)
val userInfoResult = getUserInfo(httpResult, _val)
SendingData(userEquipResult, userInfoResult)
}.await()
}
...
}
class SendingData (
var userEquip : UserEquip?,
var userInfo : UserInfo
) : Parcelable {
...
}
// MainFragment
suspend fun getUserData(editTextVal: String) {
val scopeManager = ScopeManager()
val userData = scopeManager.HttpRequest(editTextVal)
parentFragmentManager.beginTransaction().replace(R.id.frame_changingFrame, UserInfoFragment.newInstance(userData)).commit()
}
// UserInfoFragment
var userData : SendingData? = null
// 2번진행
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
userData = it.getParcelable("userData")
}
}
...
// 1번진행
companion object {
@JvmStatic
fun newInstance(userData : SendingData) =
UserInfoFragment().apply {
arguments = Bundle().apply {
// 위에서 Parcelable 클래스에 상속받은 SendingData모델
putParcelable("userData", userData)
}
}
}
// Manifest
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
예전에는 안드로이드 개발은 JAVA언어라서 완전히 백엔드의 영역이라고 생각했다. 하지만 알아갈수록.. 프론트에 더 가까운느낌이랄까.. 정말 많이 부족하고 낯설며 어려웠지만 재미는 있네