Android RecycleView Адаптер не подключен, макет пропущен

Я ищу ошибку об отсутствии подключенного адаптера. Есть так много повторяющихся вопросов об этом и имеют другой ответ, и ничто не может исправить мою ошибку.

Итак, я работаю над CRUD-приложениями с Retrofit. Я могу вставить данные в базу данных через приложение, но когда я попытался просмотреть данные, мой RecyclerView не появился.

Logcat Message:

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());
        }
    });
}
}

1 ответ

Решение

Модифицированные обратные вызовы выполняются в фоновом потоке, где вы не можете вызвать setAdapter, Создайте адаптер и установите его в главном потоке, вызвав mRecyclerView.post(runnable)с runnable, содержащим код, который нужно выполнить в основном потоке.

Другие вопросы по тегам