Bonjour
cela fait un bon moment que je cherche la solution, je ne la trouve pas.
Dans la classe APIHubble, la variable _PhotoList reste vide lorsque j’essai de récupérer les infos pour mon RecyclerView
J’essaie d’obtenir des informations d’un fichier .json et de les mettre dans mon array avec « PhotosHubble » comme objet. Je vous remercie.
MainActivity:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
APIHubble().launchJsonArrayRequest(this)
// println(APIHubble()._PhotoList.size) // 0
ui_photoList.adapter = PhotoAdapter()
ui_photoList.layoutManager = LinearLayoutManager(this)
}}
PhotosHubble :
data class PhotosHubble(var title:String, var pubDate: String, var description: String, var image: String, var thumbnail: String)
APIHubble :
class APIHubble() {
lateinit var requestQueue: RequestQueue
var _PhotoList:MutableList<PhotosHubble> = mutableListOf()
fun launchJsonArrayRequest(context:Context) {
val url = "https://hubblesite.org/api/v3/external_feed/st_live"
requestQueue = Volley.newRequestQueue(context)
val jsonArrayRequest = JsonArrayRequest(url, Response.Listener {
for (itIndex in 0 until it.length()) {
val item = it.getJSONObject(itIndex)
_PhotoList.add(PhotosHubble(
title = item.getString("title"),
pubDate = item.getString("pub_date"),
description = item.getString("description"),
image = item.getString("image"),
thumbnail = item.getString("thumbnail_large")))
}
// ICI CA PRINT BIEN
}, Response.ErrorListener { println("Erreur") })
requestQueue.add(jsonArrayRequest)
}}
PhotoAdaptater :
class PhotoAdapter : RecyclerView.Adapter<PhotoAdapter.PhotoViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PhotoViewHolder {
// 1 - Charge la vue en XML
val vueRacine = LayoutInflater.from(parent.context).inflate(R.layout.cell_image_hubble,parent,false)
// 2 - Créer un viewholder pour contrôler cette vue
val holder = PhotoViewHolder(vueRacine)
// 3 - Retourne le view holder
return holder
}
override fun getItemCount(): Int {
return APIHubble()._PhotoList.size
}
override fun onBindViewHolder(holder: PhotoViewHolder, position: Int) {
// 1 - Obtenir les infos
val photoHubble = APIHubble()._PhotoList[position]
// 2 - Envoyer les infos de la photo dans le holder
holder.fillWithPhotos(photoHubble)
}
class PhotoViewHolder(vueRacine: View) : RecyclerView.ViewHolder(vueRacine) {
private val descriptionView = vueRacine.descriptionView
//private val thumbnailView = vueRacine.thumbnailView
private val dateView = vueRacine.dateView
fun fillWithPhotos(photosHubble: PhotosHubble) {
descriptionView.text = photosHubble.description
//thumbnailView.setImageResource = photoHubble.thumbnail
dateView.text = photosHubble.pubDate
}}}
J’ai fait un test, j’ai créé deux boutons, et j’ai attendu un peu entre le clic sur le bouton4 (Qui lance la fonction launchJsonArrayRequest) et le bouton5 (pour print _PhotoList.size), le résultat est le même, _PhotoList reste vide
Merci de votre aide !