如何解决Android 应用程序 (Kotlin) 中的片段将值设置为 null
我正在开发一个应用程序,该应用程序使用 Volley 发送请求并使用 Bundle 来启用片段之间的通信。
login.setonClickListener {
var data12 = "null"
var data13 = "null"
val bundle = Bundle()
val builder4 = Uri.Builder()
builder4.scheme("http")
.encodedAuthority("18.100.200.300:8001")
.appendEncodedpath("records")
.appendEncodedpath(id)
val myUrl4 = builder4.build().toString()
val JsonObjRequest4 = object : JsonObjectRequest(Request.Method.GET,myUrl4,null,{ response4 ->
data12 = response4.getJSONObject("presentation").getJSONObject("requested_proof").getJSONObject("revealed_attr_groups").getJSONObject("additionalProp1").getJSONObject("values").getJSONObject("name").getString("raw")
data13 = response4.getJSONObject("presentation").getJSONObject("requested_proof").getJSONObject("revealed_attr_groups").getJSONObject("additionalProp1").getJSONObject("values").getJSONObject("email").getString("raw")
bundle.putString("name",data12)
bundle.putString("email",data13)
val fragment2 = Loginsuccess()
fragment2.setArguments(bundle)
getFragmentManager()?.beginTransaction()?.replace(R.id.content,fragment2)?.commit()
},{ error4 ->
Toast.makeText(context,error4.toString(),Toast.LENGTH_SHORT).show()
}) {
override fun getHeaders(): MutableMap<String,String> {
val headers = HashMap<String,String>()
headers["accept"] = "application/json; charset=utf-8"
headers["Authorization"] = "Bearer xxx"
return headers
}
}
// Add the request to the RequestQueue.
queue.add(JsonObjRequest4)
Navigation.findNavController(view).navigate(R.id.action_to_loginsuccess)
}
第二个片段看起来像这样:
class Loginsuccess : StandardContentFragment() {
override fun isFunctionBarVisibleByDefault(): Boolean = false
override fun onCreateContentView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View = inflater.inflate(R.layout.fragment_loginsuccess,container,false)
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
val name = arguments?.getString("name").toString()
val email = arguments?.getString("email").toString()
val Header = view.findViewById<TextView>(R.id.hitext)
val emailtext = view.findViewById<TextView>(R.id.emailtext)
Header.setText("Hi ${name} !")
emailtext.setText("Your Email is ${email}.")
}
}
然而,问题是当我按下按钮时,发送 GET 请求,然后将这些数据发送到应显示名称和电子邮件的第二个片段。 就我而言,甚至在我得到姓名和电子邮件之前,我就得到了:
嗨,空!您的电子邮件为空。
一段时间后,实际值出现并与之前的值重叠。
我该如何解决这个问题?
解决方法
您似乎两次加载相同的 Fragment
,第一次在您写入时加载了 null
值
Navigation.findNavController(view).navigate(R.id.action_to_loginsuccess)
在此之后您的网络调用完成并再次加载片段,但这次使用以下行的参数
getFragmentManager()?.beginTransaction()?.replace(R.id.content,fragment2)?.commit()
要解决此问题,请移除 Navigation.findNavController(view).navigate
,它应该可以按预期工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。