![](/img/trans.png)
[英]No Adapter Attached Skipping layout error with RecyclerView Adapter
[英]Error: recyclerview No adapter attached; skipping layout | when try to feth data
我收到错误消息:recyclerview 没有附加适配器; 当我尝试获取数据并存储到 recyclerview 时跳过布局
这是我的代码:
公共 class MainActivity 扩展 AppCompatActivity {
private DataAdapter dataAdapter;
private ArrayList<OrderListArray> orderListArrays=new ArrayList<>();
private RecyclerView mRecyclerView;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData();
mProgressBar=(ProgressBar)findViewById(R.id.progress_bar);
mProgressBar.setVisibility(View.VISIBLE);
mRecyclerView=(RecyclerView)findViewById(R.id.order_list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
}
public void getData(){
String userToken = Preferences.getUserToken(getBaseContext());
Log.d("[DEBUG]", "userToken: " + userToken);
Call<List<OrderListArray>> getDataCall = ApiClient.getUserService().getJson("Bearer " + userToken);
getDataCall.enqueue(new Callback<List<OrderListArray>>() {
@Override
public void onResponse(Call<List<OrderListArray>> call, Response<List<OrderListArray>> response) {
mProgressBar.setVisibility(View.GONE);
if (response.isSuccessful() && response.body()!=null) {
orderListArrays = new ArrayList<>(response.body());
dataAdapter=new DataAdapter(orderListArrays,MainActivity.this);
mRecyclerView.setAdapter(dataAdapter);
}
}
@Override
public void onFailure(Call<List<OrderListArray>> call, Throwable t) {
mProgressBar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this,"Failure",Toast.LENGTH_SHORT).show();
}
});
}
}
使用此代码:
public class MainActivity extends AppCompatActivity {
private DataAdapter dataAdapter;
private ArrayList<OrderListArray> orderListArrays=new ArrayList<>();
private RecyclerView mRecyclerView;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData();
mProgressBar=(ProgressBar)findViewById(R.id.progress_bar);
mProgressBar.setVisibility(View.VISIBLE);
mRecyclerView=(RecyclerView)findViewById(R.id.order_list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//change here
dataAdapter=new DataAdapter(orderListArrays,this);
mRecyclerView.setAdapter(dataAdapter);
}
public void getData(){
String userToken = Preferences.getUserToken(getBaseContext());
Log.d("[DEBUG]", "userToken: " + userToken);
Call<List<OrderListArray>> getDataCall = ApiClient.getUserService().getJson("Bearer " + userToken);
getDataCall.enqueue(new Callback<List<OrderListArray>>() {
@Override
public void onResponse(Call<List<OrderListArray>> call, Response<List<OrderListArray>> response) {
mProgressBar.setVisibility(View.GONE);
if (response.isSuccessful() && response.body()!=null) {
orderListArrays = new ArrayList<>(response.body());
//change here
dataAdapter.notifyDataSetChanged()
}
}
@Override
public void onFailure(Call<List<OrderListArray>> call, Throwable t) {
mProgressBar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this,"Failure",Toast.LENGTH_SHORT).show();
}
});
}
}
我猜是因为你有一些操作必须在主线程中运行,但是你在后台线程中编写代码(onResponse方法),为了解决这个问题,你可以创建一个接口回调,并在onResponse中调用你的回调方法和在主线程中更新您的 UI。
public interface MyCallBack {
void onGetResponse(Object response);
}
让您的 MainActivity 从 MyCallBack 实施
public class MainActivity extends AppCompatActivity implements MyCallBack
在您的活动中创建一个这样的字段
public class MainActivity extends AppCompatActivity implements MyCallBack {
private MyCallback myCallback;
并在您的主要活动的 onCreate 中初始化它
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myCallback = this;
setContentView(R.layout.activity_main);
在您的 onResponse 中执行以下操作:
public void onResponse(Call<List<OrderListArray>> call, Response<List<OrderListArray>> response) {
if (response.isSuccessful() && response.body()!=null) {
myCallback.onGetResponse(response.body());
}
}
onGetResponse 方法更新你的用户界面:
@Override
public void onGetResponse(Object response) {
mProgressBar.setVisibility(View.GONE);
orderListArrays = new ArrayList<>(response.body());
dataAdapter=new DataAdapter(orderListArrays,MainActivity.this);
mRecyclerView.setAdapter(dataAdapter);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.