Android RecycleView 未附加适配器,跳过布局
Android RecycleView No Adapter Attached, Skipping Layout
我搜索到有关未连接适配器的错误。关于它有很多重复的问题并且有不同的答案,并且没有什么可以解决我的错误。
所以,我正在使用 Retrofit 开发 CRUD 应用程序。我可以通过应用程序将数据插入数据库,但是当我尝试查看数据时,我的 RecyclerView 没有出现。
Logcat 留言:
RecyclerView: No adapter attached; skipping layout
这是我的 MainActivity.class
public class MainActivity extends AppCompatActivity {
Button btIns;
ApiInterface mApiInterface;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
public static MainActivity ma;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btIns = (Button) findViewById(R.id.btIns);
btIns.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, InsertActivity.class));
}
});
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mApiInterface = ApiClient.getClient().create(ApiInterface.class);
ma=this;
refresh();
}
public void refresh() {
Call<GetKontak> kontakCall = mApiInterface.getKontak();
kontakCall.enqueue(new Callback<GetKontak>() {
@Override
public void onResponse(Call<GetKontak> call, Response<GetKontak>
response) {
List<Kontak> KontakList = response.body().getListDataKontak();
Log.d("Retrofit Get", "Jumlah data Kontak: " +
String.valueOf(KontakList.size()));
mAdapter = new KontakAdapter(KontakList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onFailure(Call<GetKontak> call, Throwable t) {
Log.e("Retrofit Get", t.toString());
}
});
}
}
Retrofit 回调在后台线程中执行,您无法在其中调用 setAdapter
。通过调用 mRecyclerView.post(runnable)
创建适配器并将其设置在主线程中,runnable 包含您需要在主线程上执行的代码。
我搜索到有关未连接适配器的错误。关于它有很多重复的问题并且有不同的答案,并且没有什么可以解决我的错误。
所以,我正在使用 Retrofit 开发 CRUD 应用程序。我可以通过应用程序将数据插入数据库,但是当我尝试查看数据时,我的 RecyclerView 没有出现。
Logcat 留言:
RecyclerView: No adapter attached; skipping layout
这是我的 MainActivity.class
public class MainActivity extends AppCompatActivity {
Button btIns;
ApiInterface mApiInterface;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
public static MainActivity ma;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btIns = (Button) findViewById(R.id.btIns);
btIns.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, InsertActivity.class));
}
});
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mApiInterface = ApiClient.getClient().create(ApiInterface.class);
ma=this;
refresh();
}
public void refresh() {
Call<GetKontak> kontakCall = mApiInterface.getKontak();
kontakCall.enqueue(new Callback<GetKontak>() {
@Override
public void onResponse(Call<GetKontak> call, Response<GetKontak>
response) {
List<Kontak> KontakList = response.body().getListDataKontak();
Log.d("Retrofit Get", "Jumlah data Kontak: " +
String.valueOf(KontakList.size()));
mAdapter = new KontakAdapter(KontakList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onFailure(Call<GetKontak> call, Throwable t) {
Log.e("Retrofit Get", t.toString());
}
});
}
}
Retrofit 回调在后台线程中执行,您无法在其中调用 setAdapter
。通过调用 mRecyclerView.post(runnable)
创建适配器并将其设置在主线程中,runnable 包含您需要在主线程上执行的代码。