Java RecyclerView未连接适配器;跳过布局(无法从前面的问题中解决)
我正在尝试构建一个应用程序,该应用程序应该使用开放源代码的sport API来获取足球(足球)锦标赛列表,并将其显示在RecyclerView上,出于某种原因,我遇到了两个错误: 1-com.mad.footstats E/RecyclerView:未连接适配器;跳过布局Java RecyclerView未连接适配器;跳过布局(无法从前面的问题中解决),java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在尝试构建一个应用程序,该应用程序应该使用开放源代码的sport API来获取足球(足球)锦标赛列表,并将其显示在RecyclerView上,出于某种原因,我遇到了两个错误: 1-com.mad.footstats E/RecyclerView:未连接适配器;跳过布局 2-E/MainActivity:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行第1列路径接受格式错误的JSON$
2-E/MainActivity:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行第1列路径接受格式错误的JSON$ 我无法从之前对相同问题的回答中得出结论,因此请您抽出时间查看我的代码: 这是主要的活动:
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());
}
});
}
由于某些原因,适配器没有连接,API也无法工作,即使我看到示例和教程中有相同的代码。谢谢。异步操作完成后,必须定义适配器。 移动行:
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());
}
});
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
int statusCode=response.code();
列出锦标赛=response.body().getResults();
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
mRecyclerView.setAdapter(新的TournamentsAdapter(tournaments,R.layout.tournament_项,getApplicationContext());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(TAG,t.toString());
}
});
com.mad.footstats E/RecyclerView:未连接适配器;跳过布局
我想让你们明白,这不是一个错误,只是一个错误
警告如果未在onCreate()中设置适配器,则会发生这种情况。如果
稍后当api响应到来时设置适配器,则会出现此警告。
您可以忽略这一点。如果以后要设置适配器。
public void setList(ArrayList<Tournament_> list) {
if (list == null) return;
this.list = list;
notifyDataSetChanged();
}
如果要解决此问题,您应该按照正确的方式设置RecycleView
(1) 在onCreate()中初始化RecyclerView&bind适配器
或者您可以在适配器类中创建一个setList()方法,如下所示。
public void setList(ArrayList<Tournament_> list) {
if (list == null) return;
this.list = list;
notifyDataSetChanged();
}
在dispatchLayout()中,我们可以发现其中存在错误:
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 {
问题在于链接。您为端点选择了错误的参数。您将永远不会得到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
您是否尝试在OnResponse中加入调试器?@ZaidMirza作为初学者,我尝试过,但仍然无法解决。您的链接没有响应!我试图检查您的端点,但发现此错误Developer Inactive
。这就是为什么会出现xml错误,并且因为没有得到响应,所以不会设置回收器视图适配器。ApiInterface类中可能存在的基本URL:@OmidHeshmatinia的重复项我有一个get方法,该方法添加了:@get(“tournaments.xml”)Call getTournamentList(@Query(“api_key”)String apiKey)代码>最后一个链接是:异步请求是输入onResponse还是onFailure?你能写一个日志吗;在onResponse(…)中检查请求是否成功。是的,它返回此错误:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期的BEGIN_对象,但在第1行第1列路径$1处是字符串。我确实注意到,在我发布了问题并修复了它之后,但由于某种原因它仍然不起作用
tournaments = response.body().getResults();
adapter.notifyDataStateChanged();
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 {