android - 从 Fragments 中的 URL 读取数据
问题描述
我正在尝试从 API 读取数据并将其显示到片段内的回收器视图中。以下是我制作的代码
class MyTask : Fragment() {
lateinit var p:ArrayList<listfetch>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater?.inflate(R.layout.fragment_my_task,container,false)
var rv= rootView?.findViewById(R.id.tasklist) as RecyclerView
rv.layoutManager = LinearLayoutManager(activity)
val userkeypref = UserkeyPref(activity)
val userkey = userkeypref.getKeyValue()
val url = "http://myurl/getMyTask.php?userkey=" + userkey
AsyncTaskHandleJson().execute(url)
var adapter = Rec_data_adapter(p)
rv.adapter=adapter
return rootView
}
inner class AsyncTaskHandleJson: AsyncTask<String, String, String>(){
override fun doInBackground(vararg url: String?): String {
var text: String
val connection = URL(url[0]).openConnection() as HttpsURLConnection
try{
connection.connect()
text = connection.inputStream.use{it.reader().use { reader->reader.readText() }}
}
finally{
connection.disconnect()
}
return text
}
override fun onPostExecute(result: String) {
super.onPostExecute(result)
handleJson(result)
}
}
private fun handleJson(JsonString : String?){
val jsonArray = JSONArray(JsonString)
var x = 1
if(jsonArray.length()>1){
while(x<jsonArray.length()){
val jsonObject = jsonArray.getJSONObject(x)
p.add(listfetch(jsonObject.getString("id"),jsonObject.getString("status"),
jsonObject.getString("doc"),jsonObject.getString("title"),
jsonObject.getString("description")
))
x++
}
}
else{
p.add(listfetch("1","1","1","1","1"))
}
}
}
现在我收到错误
kotlin.UninitializedPropertyAccessException:lateinit 属性 p 尚未在 androidx 的 androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439) 的 pro.oaks.android.taskup.MyTask.onCreateView(MyTask.kt:31) 处初始化。 fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
解决方案
您必须p
在使用它之前初始化您的值。例如:
class MyTask : Fragment() {
val p = arrayListOf<listfetch>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
...
推荐阅读
- android - NullPointerException 使用改造响应
- html - 当我们按 Ctrl+P 时,CSS 的内容颜色在 Firefox 打印机上不起作用
- android - 有没有办法指定在 snapdragon 820 的性能核心上运行 android ndk 应用程序?
- angular - Angular6-TypeError:无法读取未定义的属性“模板”
- java - AWS IAM 角色代入
- pyspark - 如何从pyspark中的数据框中删除特殊字符^@
- transactions - 编写一个 TypeORM @Transaction 方法,使用该方法时 IDE 报错为“Invalid number of arguments, expect 2”
- python-3.x - 从具有重复元素的两个列表创建字典
- python - 使用 Kaitai Stuct 时出现 EOF 错误
- vba - 保存到主工作表的 vba 代码出错