Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewModel中没有显示任何内容_Android_Android Viewmodel - Fatal编程技术网

Android ViewModel中没有显示任何内容

Android ViewModel中没有显示任何内容,android,android-viewmodel,Android,Android Viewmodel,我是Kotlin的新手,尝试使用带有改装的ViewModel调用响应,问题是改装不会调用任何东西,所以没有显示任何内容 尝试过在取名为ViewModels的地方乱搞 尝试从GSON生成新的POJO 将使用权限INTERNET放入AndroidManifest中 class MovieView(context: Context) : ViewModel() { private val API_KEY: String = context.getString(R.string.api) privat

我是Kotlin的新手,尝试使用带有改装的ViewModel调用响应,问题是改装不会调用任何东西,所以没有显示任何内容

尝试过在取名为ViewModels的地方乱搞

尝试从GSON生成新的POJO

将使用权限INTERNET放入AndroidManifest中

class MovieView(context: Context) : ViewModel() {

private val API_KEY: String = context.getString(R.string.api)
private val TAG = MovieView::class.java!!.getSimpleName()

private var resultsItem: MutableLiveData<List<ResultsItem>>? = null


fun getData(): LiveData<List<ResultsItem>> {
    if (resultsItem == null) {
        resultsItem = MutableLiveData()
        loadData()
    }
    return resultsItem as MutableLiveData<List<ResultsItem>>
}

fun loadData() {
    val apiInterface = ApiClient.getList().create(ApiInterface::class.java)

    val responseCall = apiInterface.getMovieList(API_KEY)
    responseCall.enqueue(object : Callback<Response> {
        override fun onResponse(call: Call<Response>, response: retrofit2.Response<Response>) {
            val resultsItemList = response.body()!!.results
            resultsItem?.value = resultsItemList
            Log.d(TAG,"response")
        }

        override fun onFailure(call: Call<Response>, t: Throwable) {
            Log.d(TAG, "null")
        }
    })
}
}


resultsItem
必须是活动/片段观察到的不可变属性,然后只需调用
loadData()
<这里甚至不需要code>fun getData()

至于没有执行的调用。。你确定什么都没有执行吗?不
onResponse
也不
onFailure
?在我看来,这是不可能的。可能将
t.printStackTrace()
放入
onFailure
中,并在日志中查看是否存在此stacktrace

编辑:

commit
添加到
MainActivity
中的片段事务中,如下所示:

    getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.framelayout, movieFragment)
        .commit();
您还应该观察片段内部的
LiveData

val adapter = MovieAdapter(this.context!!)
recycler.adapter = adapter
viewModel = ViewModelProviders.of(this).get(MovieView::class.java)
viewModel.resultsItem.observe(this, Observer { adapter.update(it) })
viewModel.loadData()
并为ViewModel添加工厂:

private val factory = object: ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return MovieView(this@MovieFragment.context!!) as T
    }
}

viewModel = ViewModelProviders.of(this, factory).get(MovieView::class.java)
private val factory=object:ViewModelProvider.factory{
重写趣味创建(modelClass:Class):T{
返回电影视图(this@MovieFragment.context!!)作为T
}
}
viewModel=ViewModelProviders.of(this,factory).get(MovieView::class.java)

请在调用
getData()
@SandipSoni的地方发布活动/片段的代码。请参阅编辑的帖子,刚刚发布了两个类:)为什么要将
LiveData
传递到
MovieAdapter
?应该在片段内部直接观察到它,因为片段实现了
LifecycleOwner
。您将如何做?目前还没有方法实现它@ErnestZamelcyknope
t.printSStackTrace()
没有显示任何内容,尝试过之后什么也没有显示。可能是调用片段或初始化ViewModel时出错,原因是:java.lang.RuntimeException:无法创建com.example.movetv.movie.entity.adapter.movieViewClass的实例,因为您的
ViewModel的构造函数中有
上下文
。如果要为viewModel创建自定义构造函数,则还需要将
ViewModelProvider.Factory
对象传递到
ViewModelProviders.of(此工厂)
调用中。现在无错误,它返回的回答是:)但是recyclerview出现了一些问题,因为它没有显示任何内容。请接受这个正确的答案,并分别询问有关recyclerview的问题。关于stackoverflow的问题不能太广泛,而这个问题已经相当广泛了。
val adapter = MovieAdapter(this.context!!)
recycler.adapter = adapter
viewModel = ViewModelProviders.of(this).get(MovieView::class.java)
viewModel.resultsItem.observe(this, Observer { adapter.update(it) })
viewModel.loadData()
private val factory = object: ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return MovieView(this@MovieFragment.context!!) as T
    }
}

viewModel = ViewModelProviders.of(this, factory).get(MovieView::class.java)