在ViewModel中使用LiveData将对象传递给其他活动

时间:2019-07-22 22:36:51

标签: android android-livedata android-viewmodel

我正在尝试使用ViewModel中的MutableLiveData将数据从MainActivity传递到SecondActivity,当SecondActivity尝试访问LiveData时,以下代码给了我NullPointerException

ViewModel:

class MyViewModel: ViewModel() {
val current=MutableLiveData<String>()
}

主要活动:

class MainActivity : AppCompatActivity() {
private val viewModel: MyViewModel by lazy {
        ViewModelProviders.of(this).get(MyViewModel::class.java)
    }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    textView.text="test"
    viewModel.current.value="test"
    textView.setOnClickListener {
        startActivity(Intent(this,SecondActivity::class.java))
    }
}}

SecondActivity:

class SecondActivity: AppCompatActivity() {
private val viewModel: MyViewModel by lazy {
    ViewModelProviders.of(this).get(MyViewModel::class.java)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_second)
    textView2.text = viewModel.current.value!! // NullPointerException
}}

1 个答案:

答案 0 :(得分:1)

第二个viewmodel中的Activity与第一个Activity中的ViewModel不同;所有者(在本例中为活动)缓存着ViewModel个缓存,而这些所有者在每种情况下都是不同的。

Fragment可用于在同一Activity上的Intent个之间共享数据,但它们不能在活动之间共享数据。为此,将数据传递到Activity中以启动第二个val intent = Intent(this,SecondActivity::class.java).apply { putExtra("KEY", "<string to pass here>") } startActivity(intent) (如果是轻量级的),否则将其存储在一些寿命长的对象中。

<?php
      while($row = mysqli_fetch_array($result))
      {
?>
            <tr>
              <th scope="row"><?php echo  $row['testo'];?></th>
              <td>risposta 1</td>
            </tr>
<?php } ?>