Java Android RecycleView未连接适配器,跳过布局

Java Android RecycleView未连接适配器,跳过布局,java,android,api,retrofit,crud,Java,Android,Api,Retrofit,Crud,我搜索到一个关于未连接适配器的错误。有这么多重复的问题,它有不同的答案,并没有任何修复我的错误 因此,我正在使用CRUD应用程序进行改进。我可以通过应用程序将数据插入数据库,但当我试图查看数据时,我的RecyclerView并没有出现 Logcat消息: RecyclerView: No adapter attached; skipping layout 这是我的主要活动 public class MainActivity extends AppCompatActivity { Button

我搜索到一个关于未连接适配器的错误。有这么多重复的问题,它有不同的答案,并没有任何修复我的错误

因此,我正在使用CRUD应用程序进行改进。我可以通过应用程序将数据插入数据库,但当我试图查看数据时,我的RecyclerView并没有出现

Logcat消息:

RecyclerView: No adapter attached; skipping layout
这是我的主要活动

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());
        }
    });
}
}
public类MainActivity扩展了AppCompatActivity{
按钮式BTIN;
api接口;
私人回收视图mRecyclerView;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
公共活动管理硕士;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btIns=(按钮)findviewbyd(R.id.btIns);
btIns.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startActivity(新意图(MainActivity.this、InsertActivity.class));
}
});
mRecyclerView=(RecyclerView)findViewById(R.id.RecyclerView);
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(mllayoutmanager);
mApiInterface=ApiClient.getClient().create(ApiInterface.class);
ma=这个;
刷新();
}
公共无效刷新(){
调用kontakCall=mApiInterface.getKontak();
enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应
(答复){
List-KontakList=response.body().getListDataKontak();
Log.d(“改造获取”,“Jumlah数据传输”:+
String.valueOf(KontakList.size());
mAdapter=新KontakAdapter(KontakList);
mRecyclerView.setAdapter(mAdapter);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“改造Get”,t.toString());
}
});
}
}

改型回调在后台线程中执行,您不能在后台线程中调用
setAdapter
。创建适配器并在主线程中设置它,方法是调用
mRecyclerView.post(runnable)
,runnable包含您需要在主线程上执行的代码。

您能在我的代码中解释如何执行吗?我是这方面的新手,仍然不知道我必须做什么。做这个:
Runnable Runnable=new Runnable(){mAdapter=new KontakAdapter(KontakList);mRecyclerView.setAdapter(mAdapter);};mRecyclerView.post(可运行)