当前位置: 首页 > 知识库问答 >
问题:

RecyclerView未连接适配器;跳过布局(无法从前面的问题中解决)

白和泽
2023-03-14

我正在尝试构建一个应用程序,该应用程序应该使用开源体育API来获取足球(足球)锦标赛的列表并将其显示在回收人员视图上,出于某种原因,我收到了两个错误:

1-com.mad.footstatsE/RecyclView:未连接适配器;跳过布局

2-E/Main活动:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行接受格式错误的JSON第1列路径$

我无法从以前对相同问题的回答中使其工作,所以请您花时间看看我的代码:这是Mainactive:

public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private final static String API_KEY = "w7c74newrykj8m57rda6xwrk";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Toast if the API key is empty
    if(API_KEY .isEmpty()){
        Toast.makeText(getApplicationContext(), R.string.api_empty_toast, Toast.LENGTH_SHORT).show();
    }

    final RecyclerView mRecyclerView = findViewById(R.id.tournaments_rv);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

    ApiInterface apiService =
            ApiClient.getClient().create(ApiInterface.class);
    Call<TournamentResponse> call = apiService.getTournamentList(API_KEY);
    call.enqueue(new Callback<TournamentResponse>() {
        @Override
        public void onResponse(Call<TournamentResponse> call, Response<TournamentResponse> response) {
            int statusCode = response.code();
            List<Tournament_> tournaments = response.body().getResults();
            mRecyclerView.setAdapter(new TournamentsAdapter(tournaments,R.layout.tournament_item,getApplicationContext()));
        }

        @Override
        public void onFailure(Call<TournamentResponse> call, Throwable t) {
            Log.e(TAG, t.toString());
        }
    });
}

这是TournamentsAdapter的代码:

public class TournamentsAdapter extends RecyclerView.Adapter<TournamentsAdapter.LeagueViewHolder>{

private List<Tournament_> mTournaments;
private int rowLayout;
private Context context;

public static class LeagueViewHolder extends RecyclerView.ViewHolder {
    LinearLayout TournamentLayout;
    TextView tournamentName, tournamentNation, tournamentYear;

    public LeagueViewHolder(View v) {
        super(v);
        TournamentLayout = v.findViewById(R.id.league_layout);
        tournamentName = v.findViewById(R.id.tournament_name);
        tournamentNation = v.findViewById(R.id.tournament_nation);
        tournamentYear = v.findViewById(R.id.tournament_year);
    }
}

public TournamentsAdapter(List<Tournament_> tournaments, int rowLayout, Context context){
    this.mTournaments = tournaments;
    this.rowLayout = rowLayout;
    this.context = context;
}

@Override
public TournamentsAdapter.LeagueViewHolder onCreateViewHolder(ViewGroup parent,
                                                              int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
    return new LeagueViewHolder(view);
}

@Override
public void onBindViewHolder(LeagueViewHolder holder, final int position){
    holder.tournamentName.setText(mTournaments.get(position).getName());
    holder.tournamentNation.setText(mTournaments.get(position).getCurrentSeason().getYear());
    holder.tournamentYear.setText(mTournaments.get(position).getCategory().getName());
}

@Override
public int getItemCount() {
    return mTournaments.size();
}

这是ApiClient类的代码:

public class ApiClient {

public static final String BASE_URL = "https:api.sportradar.us/soccer-xt3/eu/en/";
private static Retrofit retrofit = null;

public static Retrofit getClient() {
    if (retrofit==null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

由于某种原因,适配器没有连接,API也不工作,即使我看到了具有相同代码的示例和教程。谢谢。

共有3个答案

阳宾实
2023-03-14

问题在于你的链接。您为endpoint选择了错误的参数。您将永远不会得到json响应,因此Reformation无法为您解析该响应,您正在Reformation的响应中填充回收器视图,而Reformation从未调用该视图。

只需将xml更改为json即可获得正确的响应。

https://api.sportradar.us/soccer-xt3/eu/en/tournaments.xml?api_key=API_KEY代码

<代码>https://api.sportradar.us/soccer-xt3/eu/en/tournaments.json?api_key=API_KEY

幸鸿轩
2023-03-14

通用域名格式。疯狂的footstats E/RecyclerView:未连接适配器;正在跳过布局

我想让你清楚,这不是错误,只是一个警告。当您没有在onCreate()中设置适配器时,就会发生这种情况。如果您在api响应到来时稍后设置适配器,则会出现此警告。您可以忽略这一点。如果您稍后设置适配器。

如果要解决此问题,应按照正确的方式设置回收视图。

(1) 初始化RecyclerView

List<Tournament_> tournaments;
TournamentsAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    .....
    RecyclerView mRecycler = (RecyclerView) this.findViewById(R.id.yourid);
    adapter = new TournamentsAdapter(tournaments,R.layout.tournament_item,getApplicationContext());
    mRecycler.setAdapter(adapter);
}

(2) 获取数据后,调用notifyDataStateChanged

 tournaments = response.body().getResults();
 adapter.notifyDataStateChanged();

或者可以在适配器类中创建一个setList()方法,如下所示。

public void setList(ArrayList<Tournament_> list) {
    if (list == null) return;
    this.list = list;
    notifyDataSetChanged();
}

并这样称呼它

 adapter.setList(response.body().getResults());

在调度布局()中,我们可以发现其中存在错误:

void dispatchLayout() {
    if(this.mAdapter == null) {
        Log.e("RecyclerView", "No adapter attached; skipping layout");
    } else if(this.mLayout == null) {
        Log.e("RecyclerView", "No layout manager attached; skipping layout");
    } else {
龙亮
2023-03-14

异步操作完成后,必须定义适配器。移动行:

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

异步响应如下:

call.enqueue(new Callback<TournamentResponse>() {
        @Override
        public void onResponse(Call<TournamentResponse> call, Response<TournamentResponse> response) {
            int statusCode = response.code();
            List<Tournament_> tournaments = response.body().getResults();
            mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
            mRecyclerView.setAdapter(new TournamentsAdapter(tournaments,R.layout.tournament_item,getApplicationContext()));
        }

        @Override
        public void onFailure(Call<TournamentResponse> call, Throwable t) {
            Log.e(TAG, t.toString());
        }
    });
 类似资料:
  • 我制作了一个基本的购物清单应用程序,它利用回收器视图来显示列表项目。我正在尝试使用带有片段的导航添加设置屏幕。我遇到了我的回收器视图的问题 主活动.kt HomeFragment.kt 设置Fragment.kt activity_main.xml fragment\u home.xml navigation.xml 不确定是否需要更多信息。提前道歉-我是android studio的新手

  • 当应用程序启动时,我得到一个空白屏幕,当我检查日志时,我得到:E/回收人员视图:没有连接适配器;跳过布局错误 我不知道为什么?任何想法,它似乎没有附加回收器视图或添加任何数据,我附加了Main活动、DataAdapter和数据类。 主要活动 数据适配器 下面是我的数据类,将从中提取数据 我ncluded.java 收集器和设置器 这是jsonResponse类,在接口中引用 感谢任何帮助。

  • 我已经创建了一个片段,在该片段中有一个recycle view,但是当我的片段被加载时,什么也没有显示,它给出了这个错误“E/recycle view:没有连接适配器;跳过布局”。下面是适配器和片段类的代码,任何帮助都将不胜感激 适配器类: 片段类: fragment _ view _ all _ my _ recipes . XML view_all_recipe_item.xml

  • 我想从火力点实时数据库显示图片。(带有加密图像(字符串))类似加密图像是“照片” 函数loadPhoto() 问题出在哪里?我连接adapter和recyclerview,并设置GridManager。

  • 大家晚上好,我一直在寻找一个解决方案,以解决android studio的日志发送错误,使用RecyclerView显示JSON“产品”列表,并进行了改装。 我已经阅读了与此错误相关的问题,但我无法找到符合我需求的正确答案。 Android:回收人员视图:没有附加适配器;跳过布局 未连接适配器;跳过布局回收视图错误 recyclerview未连接适配器;跳过布局 未连接适配器;跳过布局onCrea