Java E/RecyclerView:未连接适配器;跳过布局。异步任务中的问题
我想使用Jsoup从一些网站检索数据,并将这些数据放在RecyclerView中。当然,我在AsyncTask中做的第一部分。但当AsyncTask检索数据时,它不会显示在我的活动中,我会得到E/RecyclerView:没有连接适配器;跳过布局错误。这是我的密码 异步任务:Java E/RecyclerView:未连接适配器;跳过布局。异步任务中的问题,java,android,Java,Android,我想使用Jsoup从一些网站检索数据,并将这些数据放在RecyclerView中。当然,我在AsyncTask中做的第一部分。但当AsyncTask检索数据时,它不会显示在我的活动中,我会得到E/RecyclerView:没有连接适配器;跳过布局错误。这是我的密码 异步任务: public class MyAsyncTask extends AsyncTask<Void, ArrayList<Game>, ArrayList<Game>> { Activit
public class MyAsyncTask extends AsyncTask<Void, ArrayList<Game>, ArrayList<Game>> {
Activity activity;
public AsyncResponse asyncResponse = null;
Connection connection;
public MyAsyncTask(Activity activity) {
this.activity = activity;
}
ProgressBar pb;
@Override
protected void onPreExecute() {
super.onPreExecute();
pb = activity.findViewById(R.id.gamesActivity_progressBar);
pb.setVisibility(VISIBLE);
connection = Jsoup.connect(myURL);
}
@Override
protected ArrayList<Game> doInBackground(Void... voids) {
ArrayList<Game> gamesList = new ArrayList<>();
try {
Document doc = connection.get();
Elements games = doc.select("some css selectors");
for(Element elem : games)
{
Element loser = elem.select("some css selectors").first();
Element winner = elem.select("some css selectors").first();
Element loser_points = elem.select("some css selectors").first();
Element winner_points = elem.select("some css selectors").first();
String loser_string = loser.text();
String winner_string = winner.text();
String loser_points_string = loser_points.text();
String winner_points_string = winner_points.text();
gamesList.add(new Game(winner_string, loser_string, winner_points_string, loser_points_string));
}
} catch (IOException e) {
e.printStackTrace();
}
return gamesList;
}
@Override
protected void onPostExecute(ArrayList<Game> strings) {
pb.setVisibility(View.INVISIBLE);
asyncResponse.processFinish(strings);
}
公共类MyAsyncTask扩展了AsyncTask{
活动;
public AsyncResponse AsyncResponse=null;
连接;
公共MyAsyncTask(活动){
这个。活动=活动;
}
ProgressBar-pb;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pb=activity.findViewById(R.id.gamesActivity\u progressBar);
铅.可见光(可见光);
connection=Jsoup.connect(myURL);
}
@凌驾
受保护的ArrayList doInBackground(无效…无效){
ArrayList gamesList=新建ArrayList();
试一试{
Document doc=connection.get();
Elements games=doc.select(“一些css选择器”);
for(元素元素:游戏)
{
Element loser=elem.select(“一些css选择器”).first();
Element winner=elem.select(“一些css选择器”).first();
Element\u points=elem.select(“一些css选择器”).first();
Element winner_points=elem.select(“一些css选择器”).first();
String loser_String=loser.text();
String winner_String=winner.text();
String loser_points_String=loser_points.text();
String winner_points_String=winner_points.text();
添加(新游戏(赢家、输家、赢家、输家、输家);
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回游戏列表;
}
@凌驾
受保护的void onPostExecute(ArrayList字符串){
pb.setVisibility(视图不可见);
asyncResponse.processFinish(字符串);
}
}
活动:
public class GamesActivity extends AppCompatActivity implements AsyncResponse {
MyGamesAdapter adapter;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_games);
recyclerView = findViewById(R.id.gamesActivity_recyclerView);
MyAsyncTask asyncTask = new MyAsyncTask(this);
asyncTask.asyncResponse = this;
asyncTask.execute();
}
@Override
public void processFinish(ArrayList<Game> output) {
adapter = new MyGamesAdapter(output);
recyclerView.setAdapter(adapter);
}
}
公共类GamesActivity扩展AppCompatActivity实现异步响应{
MyGamesAdapter适配器;
回收视图回收视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_games);
recyclerView=findViewById(R.id.gamesActivity\u recyclerView);
MyAsyncTask asyncTask=新的MyAsyncTask(此);
asyncTask.asyncResponse=this;
asyncTask.execute();
}
@凌驾
公共void processFinish(ArrayList输出){
适配器=新的MyGamesAdapter(输出);
recyclerView.setAdapter(适配器);
}
}
在此处初始化之前,您正在尝试将适配器连接到RV
recyclerView.setAdapter(adapter);
首先尝试初始化,然后设置为RV
选项-1:
ArrayList<Game> gameList;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
adapter = new MyGamesAdapter(gameList);
recyclerView.setAdapter(adapter);
}
您正在尝试在此处初始化之前将适配器连接到RV
recyclerView.setAdapter(adapter);
首先尝试初始化,然后设置为RV
选项-1:
ArrayList<Game> gameList;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
adapter = new MyGamesAdapter(gameList);
recyclerView.setAdapter(adapter);
}
如果您遵循选项-2,那么不要忘记删除
recyclerView.setAdapter(适配器)代码>来自onCreate@Sa1m0n,你查过了吗?哦,我现在明白我的错误了。只是忘了添加布局管理器。行:recyclerView.setLayoutManager(新的LinearLayoutManager(this));使它工作。@Sa1m0n,听起来不错,如果你认为它对你有帮助,那么接受答案并按upvote。谢谢如果您遵循选项-2,那么不要忘记删除recyclerView.setAdapter(适配器)代码>来自onCreate@Sa1m0n,你查过了吗?哦,我现在明白我的错误了。只是忘了添加布局管理器。行:recyclerView.setLayoutManager(新的LinearLayoutManager(this));使它工作。@Sa1m0n,听起来不错,如果你认为它对你有帮助,那么接受答案并按upvote。谢谢