Android 如何在网络呼叫后更新适配器

Android 如何在网络呼叫后更新适配器,android,kotlin,retrofit2,adapter,Android,Kotlin,Retrofit2,Adapter,我将Kotlin与数据绑定和MVVM架构结合使用。我很难让适配器使用listAdapter在布局上填充数据。由于我使用的库,我不得不使用listAdapter(很遗憾,没有recyclerView)。这是我的密码: MainActivityViewModel.kt class MainActivityViewModel : ViewModel() { private val movieService: MovieService = RetrofitBuilder.createServic

我将Kotlin与数据绑定和MVVM架构结合使用。我很难让适配器使用listAdapter在布局上填充数据。由于我使用的库,我不得不使用listAdapter(很遗憾,没有recyclerView)。这是我的密码:

MainActivityViewModel.kt

class MainActivityViewModel : ViewModel() {
    private val movieService: MovieService = RetrofitBuilder.createService()

    fun getMovieData(): ArrayList<MovieDataModel> {
        val call = movieService.getCurrentlyPlayingMovies(API_KEY)
        val movieList = ArrayList<MovieDataModel>(10)
        call.enqueue(object : Callback<MovieDataResponse> {
            override fun onResponse(call: Call<MovieDataResponse>, response: Response<MovieDataResponse>) {
                for (i in 0 until 10) {
                    movieList.add(response.body()?.results?.get(i)!!)
                }
            }

            override fun onFailure(call: Call<MovieDataResponse>, t: Throwable) {
            }
        })
        return movieList
    }
}
MovieApiModels.kt

class MovieDataResponse(val results: List<MovieDataModel>)

class MovieDataModel(val title: String, val overview: String, val release_date: String, val vote_count: String)
每次我尝试将数据填充到布局(wheelview)时,它都不会显示任何内容。我意识到这里可能存在种族问题,但我不知道如何解决它。如果有用的话,这里有一个指向我正在使用的库(wheelview)的链接:

您的
getMovieData()
返回空列表,因为
enqueue
是异步的。这就是为什么视图中没有填充数据

尝试使用
LiveData

class MainActivityViewModel : ViewModel() {
    val movieLiveList: MutableLiveData<ArrayList<MovieDataModel>> = MutableLiveData()

        ...

    fun getMovieData() {
        val call = movieService.getCurrentlyPlayingMovies(API_KEY)
        val movieList = ArrayList<MovieDataModel>(10)
        call.enqueue(object : Callback<MovieDataResponse> {
            override fun onResponse(call: Call<MovieDataResponse>, response: Response<MovieDataResponse>) {
                for (i in 0 until 10) {
                    movieList.add(response.body()?.results?.get(i)!!)
                }

                movieLiveList.postValue(movieList)
            }

            override fun onFailure(call: Call<MovieDataResponse>, t: Throwable) {
            }
        })
    }

}
class MainActivityViewModel:ViewModel(){
val movieLiveList:MutableLiveData=MutableLiveData()
...
fun getMovieData(){
val call=movieService.getCurrentlyPlayingMovies(API_键)
val movieList=ArrayList(10)
排队(对象:Callback{
覆盖fun onResponse(调用:调用,响应:响应){
对于(从0到10的i){
movieList.add(response.body()?.results?.get(i)!!)
}
movieList.postValue(movieList)
}
覆盖失效时的乐趣(调用:调用,t:可丢弃){
}
})
}
}
然后在活动内部观察实时数据并相应地更新列表

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    val mainActivityViewModel = ViewModelProviders.of(this).get(MainActivityViewModel::class.java)
    binding.viewModel = mainActivityViewModel

    val movieList = arrayListOf<MovieDataModel>()
    val movieAdapter = MovieAdapter(movieList, this)
    binding.wheelview.adapter = movieAdapter

    mainActivityViewModel.movieLiveList.observe(this, Observer { movies ->
         movieList = movies
         movieAdapter.notifyDataSetChanged()
    })
}
override-fun-onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
binding=DataBindingUtil.setContentView(this,R.layout.activity\u main)
val mainActivityViewModel=ViewModelProviders.of(this).get(mainActivityViewModel::class.java)
binding.viewModel=mainActivityViewModel
val movieList=arrayListOf()
val movieAdapter=movieAdapter(movieList,this)
binding.wheelview.adapter=电影适配器
mainActivityViewModel.movieLiveList.observe(这个,观测者{movies->
电影演员
movieAdapter.notifyDataSetChanged()
})
}

请将您的
Json
sampled
Json
sample@Md.asaduzzaman可能是您在这行中的问题:
movieList.add(response.body()?.results?.get(i)!!)
我不这么认为。如果我将该行打印到控制台,它将提供正确的数据。我甚至试着专门打印
response.body()?.results?.get(I)!!。title
并且它给了我控制台输出中的每个电影标题,还添加了您的
MovieDataResponse
模型
{
  "results": [
    {
      "popularity": 439.564,
      "vote_count": 4901,
      "video": false,
      "poster_path": "/udDclJoHjfjb8Ekgsd4FDteOkCU.jpg",
      "id": 475557,
      "adult": false,
      "backdrop_path": "/n6bUvigpRFqSwmPp1m2YADdbRBc.jpg",
      "original_language": "en",
      "original_title": "Joker",
      "genre_ids": [
        80,
        18,
        53
      ],
      "title": "Joker",
      "vote_average": 8.5,
      "overview": "During the 1980s, a failed stand-up comedian is driven insane and turns to a life of crime and chaos in Gotham City while becoming an infamous psychopathic crime figure.",
      "release_date": "2019-10-04"
    },
    {
      "popularity": 326.936,
      "vote_count": 349,
      "video": false,
      "poster_path": "/vqzNJRH4YyquRiWxCCOH0aXggHI.jpg",
      "id": 290859,
      "adult": false,
      "backdrop_path": "/rtf4vjjLZLalpOzDUi0Qd2GTUqq.jpg",
      "original_language": "en",
      "original_title": "Terminator: Dark Fate",
      "genre_ids": [
        28,
        878
      ],
      "title": "Terminator: Dark Fate",
      "vote_average": 6.6,
      "overview": "More than two decades have passed since Sarah Connor prevented Judgment Day, changed the future, and re-wrote the fate of the human race. Dani Ramos is living a simple life in Mexico City with her brother and father when a highly advanced and deadly new Terminator – a Rev-9 – travels back through time to hunt and kill her. Dani's survival depends on her joining forces with two warriors: Grace, an enhanced super-soldier from the future, and a battle-hardened Sarah Connor. As the Rev-9 ruthlessly destroys everything and everyone in its path on the hunt for Dani, the three are led to a T-800 from Sarah’s past that may be their last best hope.",
      "release_date": "2019-11-01"
    },
    {
      "popularity": 186.869,
      "vote_count": 702,
      "video": false,
      "poster_path": "/tBuabjEqxzoUBHfbyNbd8ulgy5j.jpg",
      "id": 420809,
      "adult": false,
      "backdrop_path": "/skvI4rYFrKXS73BJxWGH54Omlvv.jpg",
      "original_language": "en",
      "original_title": "Maleficent: Mistress of Evil",
      "genre_ids": [
        12,
        14,
        10751
      ],
      "title": "Maleficent: Mistress of Evil",
      "vote_average": 7.2,
      "overview": "Maleficent and her goddaughter Aurora begin to question the complex family ties that bind them as they are pulled in different directions by impending nuptials, unexpected allies, and dark new forces at play.",
      "release_date": "2019-10-18"
    },
    {
      "popularity": 135.321,
      "vote_count": 72,
      "video": false,
      "poster_path": "/4E2lyUGLEr3yH4q6kJxPkQUhX7n.jpg",
      "id": 568012,
      "adult": false,
      "backdrop_path": "/iGnCzXEx0cFlUbpyAMeHwHWhPhx.jpg",
      "original_language": "ja",
      "original_title": "ワンピーススタンピード",
      "genre_ids": [
        28,
        12,
        16
      ],
      "title": "One Piece: Stampede",
      "vote_average": 7.5,
      "overview": "One Piece: Stampede is a stand-alone film that celebrates the anime's 20th Anniversary and takes place outside the canon of the \"One Piece\" TV series. Monkey D. Luffy and his Straw Hat pirate crew are invited to a massive Pirate Festival that brings many of the most iconic characters from throughout the franchise to participate in competition with the Straw Hats to find Roger's treasure. It also pits the Straw Hats against a new enemy named Bullet, a former member of Roger's crew.",
      "release_date": "2019-10-24"
    },
    {
      "popularity": 111.413,
      "vote_count": 161,
      "video": false,
      "poster_path": "/p69QzIBbN06aTYqRRiCOY1emNBh.jpg",
      "id": 501170,
      "adult": false,
      "backdrop_path": "/1nm0sk8UUx9jHCTHuMKe2jkt4Pn.jpg",
      "original_language": "en",
      "original_title": "Doctor Sleep",
      "genre_ids": [
        27
      ],
      "title": "Doctor Sleep",
      "vote_average": 6.9,
      "overview": "A traumatized, alcoholic Dan Torrance meets Abra, a kid who also has the ability to \"shine.\" He tries to protect her from the True Knot, a cult whose goal is to feed off of people like them in order to remain immortal.",
      "release_date": "2019-11-08"
    },
    {
      "popularity": 97.18,
      "vote_count": 328,
      "video": false,
      "poster_path": "/tximyCXMEnWIIyOy9STkOduUprG.jpg",
      "id": 521777,
      "adult": false,
      "backdrop_path": "/zIZv4pPJRg3YTnWWuotwXnYu1fM.jpg",
      "original_language": "en",
      "original_title": "Good Boys",
      "genre_ids": [
        35
      ],
      "title": "Good Boys",
      "vote_average": 6.6,
      "overview": "A group of young boys on the cusp of becoming teenagers embark on an epic quest to fix their broken drone before their parents get home.",
      "release_date": "2019-08-16"
    },
    {
      "popularity": 101.352,
      "vote_count": 278,
      "video": false,
      "poster_path": "/8u0QBGUbZcBW59VEAdmeFl9g98N.jpg",
      "id": 504949,
      "adult": false,
      "backdrop_path": "/r0AWsZ9dBvC2No3kND9nxv3iRbb.jpg",
      "original_language": "en",
      "original_title": "The King",
      "genre_ids": [
        18,
        36,
        10752
      ],
      "title": "The King",
      "vote_average": 7.4,
      "overview": "England, 15th century. Hal, a capricious prince who lives among the populace far from court, is forced by circumstances to reluctantly accept the throne and become Henry V.",
      "release_date": "2019-10-11"
    },
    {
      "popularity": 78.038,
      "vote_count": 282,
      "video": false,
      "poster_path": "/pIcV8XXIIvJCbtPoxF9qHMKdRr2.jpg",
      "id": 338967,
      "adult": false,
      "backdrop_path": "/jCCdt0e8Xe9ttvevD4S3TSMNdH.jpg",
      "original_language": "en",
      "original_title": "Zombieland: Double Tap",
      "genre_ids": [
        28,
        35,
        27
      ],
      "title": "Zombieland: Double Tap",
      "vote_average": 7.4,
      "overview": "Columbus, Tallahassee, Wichita, and Little Rock move to the American heartland as they face off against evolved zombies, fellow survivors, and the growing pains of the snarky makeshift family.",
      "release_date": "2019-10-18"
    },
    {
      "popularity": 86.634,
      "vote_count": 1309,
      "video": false,
      "poster_path": "/ePXuKdXZuJx8hHMNr2yM4jY2L7Z.jpg",
      "id": 559969,
      "adult": false,
      "backdrop_path": "/ijiE9WoGSwSzM16zTxvUneJ8RXc.jpg",
      "original_language": "en",
      "original_title": "El Camino: A Breaking Bad Movie",
      "genre_ids": [
        80,
        18,
        53
      ],
      "title": "El Camino: A Breaking Bad Movie",
      "vote_average": 7.1,
      "overview": "In the wake of his dramatic escape from captivity, Jesse Pinkman must come to terms with his past in order to forge some kind of future.",
      "release_date": "2019-10-11"
    },
    {
      "popularity": 97.537,
      "vote_count": 164,
      "video": false,
      "poster_path": "/g4z7mDmJmx23vsVg6XNWcnXb6gc.jpg",
      "id": 480105,
      "adult": false,
      "backdrop_path": "/3uG3aOhEzFCjcQulsJQiAzLSrw8.jpg",
      "original_language": "en",
      "original_title": "47 Meters Down: Uncaged",
      "genre_ids": [
        12,
        27,
        53
      ],
      "title": "47 Meters Down: Uncaged",
      "vote_average": 5.1,
      "overview": "A group of backpackers diving in a ruined underwater city discover that they have stumbled into the territory of the ocean's deadliest shark species.",
      "release_date": "2019-08-16"
    },
    {
      "popularity": 77.57,
      "vote_count": 482,
      "video": false,
      "poster_path": "/uTALxjQU8e1lhmNjP9nnJ3t2pRU.jpg",
      "id": 453405,
      "adult": false,
      "backdrop_path": "/c3F4P2oauA7IQmy4hM0OmRt2W7d.jpg",
      "original_language": "en",
      "original_title": "Gemini Man",
      "genre_ids": [
        28,
        18
      ],
      "title": "Gemini Man",
      "vote_average": 5.7,
      "overview": "Henry Brogen, an aging assassin tries to get out of the business but finds himself in the ultimate battle: fighting his own clone who is 25 years younger than him and at the peak of his abilities.",
      "release_date": "2019-10-11"
    },
    {
      "popularity": 67.088,
      "vote_count": 3128,
      "video": false,
      "poster_path": "/ziEuG1essDuWuC5lpWUaw1uXY2O.jpg",
      "id": 458156,
      "adult": false,
      "backdrop_path": "/stemLQMLDrlpfIlZ5OjllOPT8QX.jpg",
      "original_language": "en",
      "original_title": "John Wick: Chapter 3 - Parabellum",
      "genre_ids": [
        28,
        80,
        53
      ],
      "title": "John Wick: Chapter 3 - Parabellum",
      "vote_average": 7.1,
      "overview": "Super-assassin John Wick returns with a $14 million price tag on his head and an army of bounty-hunting killers on his trail. After killing a member of the shadowy international assassin’s guild, the High Table, John Wick is excommunicado, but the world’s most ruthless hit men and women await his every turn.",
      "release_date": "2019-05-17"
    },
    {
      "popularity": 70.145,
      "vote_count": 1867,
      "video": false,
      "poster_path": "/zfE0R94v1E8cuKAerbskfD3VfUt.jpg",
      "id": 474350,
      "adult": false,
      "backdrop_path": "/8moTOzunF7p40oR5XhlDvJckOSW.jpg",
      "original_language": "en",
      "original_title": "It Chapter Two",
      "genre_ids": [
        27
      ],
      "title": "It Chapter Two",
      "vote_average": 6.9,
      "overview": "27 years after overcoming the malevolent supernatural entity Pennywise, the former members of the Losers' Club, who have grown up and moved away from Derry, are brought back together by a devastating phone call.",
      "release_date": "2019-09-06"
    },
    {
      "popularity": 65.706,
      "vote_count": 540,
      "video": false,
      "poster_path": "/q5298SICFzqMcKtQoBktk8p6FH.jpg",
      "id": 417384,
      "adult": false,
      "backdrop_path": "/qBI3Spq93lNxGzecdGpbwV5lOvU.jpg",
      "original_language": "en",
      "original_title": "Scary Stories to Tell in the Dark",
      "genre_ids": [
        27,
        53
      ],
      "title": "Scary Stories to Tell in the Dark",
      "vote_average": 6.3,
      "overview": "Mill Valley, Pennsylvania, Halloween night, 1968. After playing a joke on a school bully, Sarah and her friends decide to sneak into a supposedly haunted house that once belonged to the powerful Bellows family, unleashing dark forces that they will be unable to control.",
      "release_date": "2019-08-09"
    },
    {
      "popularity": 57.801,
      "vote_count": 2,
      "video": false,
      "poster_path": "/xL1yNzwGSXfassYpt13hXADpz6R.jpg",
      "id": 522162,
      "adult": false,
      "backdrop_path": "/1ZSjrBUHP2jm1QlQEyLGufL289q.jpg",
      "original_language": "en",
      "original_title": "Midway",
      "genre_ids": [
        28,
        18,
        36,
        10752
      ],
      "title": "Midway",
      "vote_average": 5,
      "overview": "The story of the soldiers and aviators who helped turn the tide of the Second World War during the iconic Battle of Midway in June 1942.",
      "release_date": "2019-11-08"
    },
    {
      "popularity": 57.473,
      "vote_count": 697,
      "video": false,
      "poster_path": "/fgGzTEoNxptCRtEOpOPvIEdlxAq.jpg",
      "id": 535581,
      "adult": false,
      "backdrop_path": "/cXyfAViYly0Lk2CVpEKgYbt9wKQ.jpg",
      "original_language": "en",
      "original_title": "The Dead Don't Die",
      "genre_ids": [
        35,
        14,
        27
      ],
      "title": "The Dead Don't Die",
      "vote_average": 5.5,
      "overview": "In a small peaceful town, zombies suddenly rise to terrorize the town. Now three bespectacled police officers and a strange Scottish morgue expert must band together to defeat the undead.",
      "release_date": "2019-06-14"
    },
    {
      "popularity": 51.245,
      "vote_count": 2521,
      "video": false,
      "poster_path": "/8j58iEBw9pOXFD2L0nt0ZXeHviB.jpg",
      "id": 466272,
      "adult": false,
      "backdrop_path": "/nGJpQCAn2NKeDoEflLI5DIvsqoQ.jpg",
      "original_language": "en",
      "original_title": "Once Upon a Time... in Hollywood",
      "genre_ids": [
        35,
        18
      ],
      "title": "Once Upon a Time... in Hollywood",
      "vote_average": 7.6,
      "overview": "A faded television actor and his stunt double strive to achieve fame and success in the film industry during the final years of Hollywood's Golden Age in 1969 Los Angeles.",
      "release_date": "2019-07-26"
    },
    {
      "popularity": 52.059,
      "vote_count": 0,
      "video": false,
      "poster_path": "/zHQFqG0e5p9Fwhv5v6XIP9fLtYk.jpg",
      "id": 330457,
      "adult": false,
      "backdrop_path": "/xJWPZIYOEFIjZpBL7SVBGnzRYXp.jpg",
      "original_language": "en",
      "original_title": "Frozen II",
      "genre_ids": [
        12,
        16,
        35,
        14,
        10402,
        10751
      ],
      "title": "Frozen II",
      "vote_average": 0,
      "overview": "Elsa, Anna, Kristoff and Olaf are going far in the forest to know the truth about an ancient mystery of their kingdom.",
      "release_date": "2019-11-22"
    },
    {
      "popularity": 51.831,
      "vote_count": 154,
      "video": false,
      "poster_path": "/uaXNjRkDdjfxfVuKHo25wkA6CiA.jpg",
      "id": 481084,
      "adult": false,
      "backdrop_path": "/ur4NTeFGZmQ6Hz5uEkAMgPI3WRg.jpg",
      "original_language": "en",
      "original_title": "The Addams Family",
      "genre_ids": [
        16,
        35,
        14,
        10751
      ],
      "title": "The Addams Family",
      "vote_average": 5.9,
      "overview": "The Addams family's lives begin to unravel when they face-off against a treacherous, greedy crafty reality-TV host while also preparing for their extended family to arrive for a major celebration.",
      "release_date": "2019-10-11"
    },
    {
      "popularity": 44.772,
      "vote_count": 255,
      "video": false,
      "poster_path": "/ebe8hJRCwdflNQbUjRrfmqtUiNi.jpg",
      "id": 454640,
      "adult": false,
      "backdrop_path": "/k7sE3loFwuU2mqf7FbZBeE3rjBa.jpg",
      "original_language": "en",
      "original_title": "The Angry Birds Movie 2",
      "genre_ids": [
        12,
        16,
        35,
        10751
      ],
      "title": "The Angry Birds Movie 2",
      "vote_average": 6.4,
      "overview": "Red, Chuck, Bomb and the rest of their feathered friends are surprised when a green pig suggests that they put aside their differences and unite to fight a common threat. Aggressive birds from an island covered in ice are planning to use an elaborate weapon to destroy the fowl and swine.",
      "release_date": "2019-08-14"
    }
  ],
  "page": 1,
  "total_results": 1392,
  "dates": {
    "maximum": "2019-11-12",
    "minimum": "2019-09-25"
  },
  "total_pages": 70
}
class MainActivityViewModel : ViewModel() {
    val movieLiveList: MutableLiveData<ArrayList<MovieDataModel>> = MutableLiveData()

        ...

    fun getMovieData() {
        val call = movieService.getCurrentlyPlayingMovies(API_KEY)
        val movieList = ArrayList<MovieDataModel>(10)
        call.enqueue(object : Callback<MovieDataResponse> {
            override fun onResponse(call: Call<MovieDataResponse>, response: Response<MovieDataResponse>) {
                for (i in 0 until 10) {
                    movieList.add(response.body()?.results?.get(i)!!)
                }

                movieLiveList.postValue(movieList)
            }

            override fun onFailure(call: Call<MovieDataResponse>, t: Throwable) {
            }
        })
    }

}
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    val mainActivityViewModel = ViewModelProviders.of(this).get(MainActivityViewModel::class.java)
    binding.viewModel = mainActivityViewModel

    val movieList = arrayListOf<MovieDataModel>()
    val movieAdapter = MovieAdapter(movieList, this)
    binding.wheelview.adapter = movieAdapter

    mainActivityViewModel.movieLiveList.observe(this, Observer { movies ->
         movieList = movies
         movieAdapter.notifyDataSetChanged()
    })
}