Je viens de commencer avec cette nouvelle application et je voulais voir si j'obtiens une réponse par Retrofit et l'imprimer dans un TextView.
Mais l'application plante sans aucune trace de pile, donc pas d'exception ... juste rien. p>
J'ai une interface Retrofit et une "Factory" qui crée la requête tout s'exécute dans un thread différent via Kotlin Coroutine.
class MainActivity : AppCompatActivity() { private lateinit var debugTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) debugTextView = findViewById(R.id.debugTextView) val service = RetrofitFactory.makeCarDataService() GlobalScope.launch(Dispatchers.Main) { val request = service.getData() val response = request.await() debugTextView.text =response.toString() } } }
J'aimerais publier un Erreur ... mais il n'y en a pas, tout devrait fonctionner parfaitement: /
4 Réponses :
Sans stacktrace, voici les problèmes possibles:
response.toString()
peut lancer NullPointerException
debugTextView.text
peut lancer NullPointerException
service.getData()
peut lancer NullPointerException
Je ne suis pas très familier avec les coroutines, mais avez-vous essayé d'utiliser le thread principal uniquement lors de la définition du texte sur la vue? quelque chose comme ceci:
val service = RetrofitFactory.makeCarDataService() GlobalScope.launch(Dispatchers.Default/*change here*/) { val request = service.getData() val response = request.await() /*change here*/ withContext(Dispatchers.Main) { debugTextView.text = response.toString() } } }
Pour utiliser Dispatchers.Main
, nous devons ajouter la ligne suivante aux dépendances du fichier build.gradle de l'application:
implémentation 'org.jetbrains.kotlinx: kotlinx-coroutines-android: 1.0.1'
L'absence de cette dépendance pourrait être la raison pour laquelle l'application se bloque sans aucune trace de pile.
Cela a fonctionné pour moi. Supprimez le signe $ comme ceci: implémentation 'org.jetbrains.kotlinx: kotlinx-coroutines-android: 1.1.1'
Essayez ceci:
try { val request = service.getData() val response = request.await() debugTextView.text =response.toString() } catch (e: RuntimeException) { e.printStackTrace() } catch (t: Throwable) { t.printStackTrace() }
impossible il n'y a pas de stacktace ...
Juste une trace de pile du démarrage de l'application et du débogueur, mais l'application se bloque immédiatement sans erreur / exception ...
Supprimez tout le code après
debugTextView = findViewById (R.id.debugTextView)
, s'est-il écrasé?