Android Studio'da varsayılan Oturum Açma özelliğini kullandım ve basit bir oturum açma görünümü oluşturdum. Uygulamamda kimlik doğrulama görevi ve erişim belirteci üretimi, API çağrıları aracılığıyla sunucu tarafından gerçekleştiriliyor. Ancak, api çağrısının bir tamamlama bloğu olması gerektiğinden, doInBackground
oturum açma işlevim de çalışır. Bu nedenle, kimlik doğrulama sonucu, tamamlama bloğunun iş parçacığı içinde bulunur; bu, orijinal doInBackground
öğesinin döndürülen sonucunu onPostExecute
için yanlış yapar. Fonksiyonlar geçersiz, bu yüzden onların parametrelerini ve formatlarını değiştiremiyorum. Android geliştirmede hala yeni ve asenkronize edilmiş görevine hala aşina değilim, bu yüzden doInBackground
'da durma ve sonuç blokunda sonucun beklenmesi için herhangi bir yol olup olmadığını sormak isterim? Ya da API girişimi çözmek için daha iyi bir çözüm var mı? Teşekkürler. İşteOturum açtıktan sonra doInBackground sonucunu döndürme API tamamlama bloğu, oturum açıldıktan sonra UserLoginTask
benim UserLoginTask kod (KOTLIN yazılmış ama konsept java ile aynı olacağını düşünüyorum):
inner class UserLoginTask internal constructor(private val mUsername: String, private val mPassword) : AsyncTask<Void, Void, Boolean>() {
override fun doInBackground(vararg params: Void?): Boolean? {
var result = false
try {
Thread.sleep(2000)
} catch(e: InterruptedException) {
return false
}
MyLoginService().login(mUsername, mPassword, onCompleted = { token ->
// I want to get the login result from here and return it to onPostExecute
// It's no use if I change the result to true here because the result is already returned before completion.
})
return result
}
override fun onPostExecute(success: Boolean?) {
mAuthTask = null
showProgress(false)
if(success!!) {
finish()
} else {
mPasswordView!!.error = getString(R.string.error_incorrect_password)
mPasswordView!!.requestFocus()
}
}
override fun onCancelled() {
mAuthTask = null
showProgress(false)
}
}
Eşzamansız görev geçersiz kılma işlevlerinin parametreleri ve dönüş tipi, AsyncTask() öğesinde tanımlanan parametreye bağlıdır. Yani, Boole parametresini onpostExecute yönteminde istediğiniz üçüncü parametreye değiştirin. –
"Sonuç" ifadesiniExExpress'e döndürüyorsunuz .. Bu koddan "sonuç" her zaman yanlıştır. Bu değeri asla değiştirmiyor musunuz? –
Geri dönüş türünü nasıl değiştireceğimi anlatmak için teşekkürler @AshimKansal, çok yardımcı olur! Şimdi, yalnızca tamamlama bloğu ile uğraşmaya odaklanmayı deneyebilirim ... – whitney13625