我正在尝试使用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
}}
答案 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 } ?>