Java ListView无法显示从URL检索的列表
我是安卓工作室的新手。我正在尝试使用选项create->newfragment(List)自定义IDE自动创建的片段。我无法显示从http页面检索到的列表,但是如果我手动将项目添加到列表中,仿真器会让我看到它。我怎样才能解决这个问题 municipioFragment.javaJava ListView无法显示从URL检索的列表,java,android,url,fragment,Java,Android,Url,Fragment,我是安卓工作室的新手。我正在尝试使用选项create->newfragment(List)自定义IDE自动创建的片段。我无法显示从http页面检索到的列表,但是如果我手动将项目添加到列表中,仿真器会让我看到它。我怎样才能解决这个问题 municipioFragment.java package com.example.is2_app.ui.municipio; 导入android.content.Context; 导入android.os.Bundle; 导入android.view.Layou
package com.example.is2_app.ui.municipio;
导入android.content.Context;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
导入androidx.recyclerview.widget.GridLayoutManager;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入com.example.is2_app.R;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
公共类市政片段扩展片段{
//TODO:自定义参数
私有int mColumnCount=1;
私人新闻;
私有OnListFragmentInteractionListener-MLListener;
公共市政碎片(){
}
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
lstNews=newarraylist();
getURL();
}
@凌驾
创建视图上的公共视图(LAYOUTINGER充气机,@Nullable ViewGroup container,
@可为空的捆绑包savedInstanceState){
视图=充气机。充气(R.layout.fragment\u市政列表,容器,错误);
//设置适配器
如果(查看RecyclerView的实例){
Context=view.getContext();
RecyclerView RecyclerView=(RecyclerView)视图;
如果(mColumnCountSogetUrl()
正在线程中运行
。此外,使用JSoup
获取文档
需要一些时间。这意味着onCreateView
可能会在lstNews
填充从文档
中抓取的数据之前运行
因此,您希望更新您的数据集
;然后,您希望通知您的适配器
您的数据集
已更改
将此方法添加到适配器中
public void updateData(List<News> mData) {
this.mData = mData;
this.notifyDataSetChanged();
}
其中,RecycleServiceAdapter
与RecycleView
一起定义,并在onCreateView
中初始化。
因此,下面这句话:
recyclerView.setAdapter(new MymunicipioRecyclerViewAdapter(lstNews, mListener));
将成为:
recyclerViewAdapter = new MymunicipioRecyclerViewAdapter(lstNews, mListener);
recyclerView.setAdapter(recyclerViewAdapter);
因此,getUrl()
正在线程中运行。此外,使用JSoup
获取文档需要一些时间。这意味着onCreateView
可能会在lstNews
填充从文档中刮取的数据之前运行
因此,您希望更新您的数据集
;然后,您希望通知您的适配器
您的数据集
已更改
将此方法添加到适配器中
public void updateData(List<News> mData) {
this.mData = mData;
this.notifyDataSetChanged();
}
其中,RecycleServiceAdapter
与RecycleView
一起定义,并在onCreateView
中初始化。
因此,下面这句话:
recyclerView.setAdapter(new MymunicipioRecyclerViewAdapter(lstNews, mListener));
将成为:
recyclerViewAdapter = new MymunicipioRecyclerViewAdapter(lstNews, mListener);
recyclerView.setAdapter(recyclerViewAdapter);
收集适配器
数据
后,您不会更新它。数据
的收集是在运行onCreateView
后进行的。如果我的回答中有不清楚的地方,请告诉我。谢谢。我正在尝试修复它,但我不知道如何修改代码。您没有回答t在收集适配器
数据
后更新它。数据
的收集是在运行onCreateView
后进行的。如果我的回答中有不清楚的地方,请告诉我。谢谢。我正在尝试修复它,但我不知道如何修改代码。谢谢,但是当我在for循环中添加recyclerViewAdapter.updateData(lstNews);
我得到一个错误,因为recyclerView
在OnCreateView
中声明,而我在onCreate
方法中调用getURL()
。@peppe您想移动getURL()
到onCreateView
的末尾;因此它类似于getURL();
然后返回视图;
line@peppe请让我知道我的评论是否解决了您的问题。我按照您的建议,但现在当我尝试在emulator中转到此片段时,应用程序崩溃,并显示以下日志消息:E/AndroidRuntime:FATAL EXCEPTION:Thread-2 Process:com.example.is2_app,PID:32098 android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。@peppe我更新了答案,用runOnUiThread
包装updateData
,谢谢,但是当我添加RecycleServiceAdapter.updateData(lstNews)时在for循环中,我得到了一个错误,因为recyclerView
在OnCreateView
中声明,而我在onCreate
方法中调用getURL()
。@peppe您需要将getURL()
移动到OnCreateView
的末尾;因此这就像getURL();
然后返回视图;
line@peppe请让我知道我的评论是否解决了您的问题。我按照您的建议,但现在当我尝试在emulator中转到此片段时,应用程序崩溃,并显示以下日志消息:E/AndroidRuntime:FATAL EXCEPTION:Thread-2 Process:com.example.is2_app,PID:32098 android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。@peppe I更新了我的答案,将updateData
用runOnUiThread
recyclerView.setAdapter(new MymunicipioRecyclerViewAdapter(lstNews, mListener));
recyclerViewAdapter = new MymunicipioRecyclerViewAdapter(lstNews, mListener);
recyclerView.setAdapter(recyclerViewAdapter);