Android 回收器视图未到达适配器

Android 回收器视图未到达适配器,android,android-recyclerview,Android,Android Recyclerview,我在一个活动中有一个回收器视图,它无法到达适配器,我知道这个bcoz我已经放置了Log.e消息,但是放置在适配器中的任何消息都不会显示 这是我的密码 java(具有回收器视图的活动) 错误2和3来自数据库,这意味着它们也可以工作 适配器中缺少错误4和5,这意味着适配器无法触及(不知何故) 请提供帮助(我还通过sqlite浏览器检查了sqlite中是否有数据,以及是否有数据) 我们已经做了一天了,非常感谢您的帮助 (我发布了代码,但由于项目负责人通知的版权问题,我不得不删除)LinearLayou

我在一个活动中有一个回收器视图,它无法到达适配器,我知道这个bcoz我已经放置了Log.e消息,但是放置在适配器中的任何消息都不会显示

这是我的密码 java(具有回收器视图的活动)

错误2和3来自数据库,这意味着它们也可以工作 适配器中缺少错误4和5,这意味着适配器无法触及(不知何故)

请提供帮助(我还通过sqlite浏览器检查了sqlite中是否有数据,以及是否有数据)

我们已经做了一天了,非常感谢您的帮助


(我发布了代码,但由于项目负责人通知的版权问题,我不得不删除)

LinearLayoutManager使用getApplicationContext()实例化

负责在适配器内创建视图。
正如您从中看到的,您应该将活动上下文与此一起使用

您正在后台线程中更新列表,但您的recyclerView操作在UI线程中,因此实际上不会收到通知

将方法
getDataFromSQLite()
更改为:

@SuppressLint("StaticFieldLeak")
private void getDataFromSQLite()    {
    // AsyncTask is used that SQLite operation not blocks the UI Thread.
    new AsyncTask<Void, Void, ArrayList<Pojo>>() {
        @Override
        protected Void doInBackground(Void... params) {
            Log.e("Error3", "Reached Here 3");
            return databaseHelper.getAllPhoneList();
        }

        @Override
        protected void onPostExecute(ArrayList<Pojo> pojos) {
            super.onPostExecute(pojos);
            list.clear();
            list.addAll(pojos);
            phoneRecyclerAdapter.notifyDataSetChanged();
        }
    }.execute();
}
@suppressint(“StaticFieldLeak”)
私有void getDataFromSQLite(){
//AsyncTask用于确保SQLite操作不会阻塞UI线程。
新建异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
Log.e(“错误3”,“到达此处3”);
返回databaseHelper.getAllPhoneList();
}
@凌驾
受保护的void onPostExecute(ArrayList POJO){
super.onPostExecute(POJO);
list.clear();
列表。添加所有(POJO);
phoneRecyclerAdapter.notifyDataSetChanged();
}
}.execute();
}

doInBackground()
方法在单独的线程中运行,并在
onPostExecute()
中将结果传递给UI线程。

在代码中发现一些错误。 此方法
getAllPhoneList()
返回Pojo对象的空列表,因为您错过了将Pojo对象添加到do while迭代器中的列表中

list.add(listRecord);
我已经做了修改,希望它能正常工作,请像我下面的代码一样进行修改

onCreate()
调用此
initAndFillData()
方法,就像您在代码中所做的那样,并将其粘贴到下面的代码中

public void initAndFillData()
    {
        Log.e("Error1", "Reached Here 1");
        recyclerViewPhone = findViewById(R.id.recyclerphone);
        list = new ArrayList<>();
        recyclerViewPhone.setLayoutManager(new LinearLayoutManager(this));
    recyclerViewPhone.setItemAnimator(new DefaultItemAnimator());
        recyclerViewPhone.setHasFixedSize(true);
        new LoadDataFromSqlite().execute();
    }

这一定行得通。希望有帮助。

抱歉,我无法重现您的错误。当然,我没有你的数据库等,所以我不得不伪造这部分。但在我的设置中,我看到了所有五个Logcat条目。因此,如果您仍然需要帮助,请发布重现问题所需的所有代码。最好只有必要的代码,我不认为您的问题与NavigationView中项目的数量(或点击的处理)有关menu@0X0nosugar先生,我已经添加了我的全部代码,而且从我学到的地方来看,问题是两个代码都是相似的,而另一个代码仍然有效,而我的代码则无效t@0X0nosugar先生我已经添加了我的全部代码,因为我不知道哪部分出错。如果时间允许,请看一看。先生,我不能更改Asynctask函数的返回类型,,,它给了我错误,但是我已经添加了我的全部代码以及我从中学到的代码。这两者没有太大区别,但我的不起作用。如果时间允许的话,请看一看,先生,这没用。我已经发布了我的全部代码。请看一看,先生,你太棒了,或者说我真的很愚蠢,犯了这样一个愚蠢的错误(有时我觉得我应该退出开发),这真的很有帮助。另外,为异步任务创建一个单独的类是一个好主意,可以使代码更具可读性。非常感谢Mohammed Farhan先生,如果你愿意的话,这是一个愚蠢的问题,但是你是如何学习Android编程的呢?我几周前刚开始学习,我正在寻找好的资源来学习,以便接近你的专业水平。Harsh,你写的是干净的代码。我建议你多做一些不同的事情,因为熟能生巧。
 public List<Pojo> getAllPhoneList() {
    List<Pojo> list = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM PhoneTable where BPhone=1 ORDER BY rid DESC", null);
    if (cursor.moveToFirst()) {
        do {
            Pojo listRecord = new Pojo();
          listRecord.setNumber(cursor.getString(cursor.getColumnIndex(DatabaseHelper.number)));
            listRecord.setLati(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.lati)));
            listRecord.setLongi(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.longi)));
            listRecord.setDate(cursor.getString(cursor.getColumnIndex(DatabaseHelper.date)));
            listRecord.setTime(cursor.getString(cursor.getColumnIndex(DatabaseHelper.time)));
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    Log.e("Error 2 ", "Reached Here 2");
    return list;
}
04-13 23:11:56.855 6416-6416/c.bit.bitscaller E/Error1: Reached Here 1
04-13 23:11:56.885 6416-6485/c.bit.bitscaller E/Error 2: Reached Here 2
04-13 23:11:56.885 6416-6485/c.bit.bitscaller E/Error3: Reached Here 3
@SuppressLint("StaticFieldLeak")
private void getDataFromSQLite()    {
    // AsyncTask is used that SQLite operation not blocks the UI Thread.
    new AsyncTask<Void, Void, ArrayList<Pojo>>() {
        @Override
        protected Void doInBackground(Void... params) {
            Log.e("Error3", "Reached Here 3");
            return databaseHelper.getAllPhoneList();
        }

        @Override
        protected void onPostExecute(ArrayList<Pojo> pojos) {
            super.onPostExecute(pojos);
            list.clear();
            list.addAll(pojos);
            phoneRecyclerAdapter.notifyDataSetChanged();
        }
    }.execute();
}
list.add(listRecord);
public void initAndFillData()
    {
        Log.e("Error1", "Reached Here 1");
        recyclerViewPhone = findViewById(R.id.recyclerphone);
        list = new ArrayList<>();
        recyclerViewPhone.setLayoutManager(new LinearLayoutManager(this));
    recyclerViewPhone.setItemAnimator(new DefaultItemAnimator());
        recyclerViewPhone.setHasFixedSize(true);
        new LoadDataFromSqlite().execute();
    }
class LoadDataFromSqlite extends AsyncTask<Void, Void, Void>
{
    DataBaseHelper dataBaseHelper = new DataBaseHelper(context);

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();

       //Show porgressbar if needed.
    }

    @Override
    protected Void doInBackground(Void... voids)
    {

       //           Get the list of pojo objects by calling this below method of databasehelper
        list = dataBaseHelper.getAllPhoneList();
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid)
    {
        super.onPostExecute(aVoid);

     //         Check if obtained list of pojo size is null, if its null then you have no data in db.
        if (list.size() > 0)
        {

          //                pass dataset (list of pojo object) to adapter and set adapter to recylerview
            phoneRecyclerAdapter = new PhoneRecyclerAdapter(list, this);
            recyclerViewPhone.setAdapter(phoneRecyclerAdapter);
        }
    }
}
    public List<Pojo> getAllPhoneList()
{
    List<Pojo> list = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM PhoneTable where BPhone=1 ORDER BY rid DESC", null);
    if (cursor.moveToFirst())
    {
        do
        {
            Pojo listRecord = new Pojo();
            listRecord.setNumber(cursor.getString(cursor.getColumnIndex(DatabaseHelper.number)));
            listRecord.setLati(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.lati)));
            listRecord.setLongi(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.longi)));
            listRecord.setDate(cursor.getString(cursor.getColumnIndex(DatabaseHelper.date)));
            listRecord.setTime(cursor.getString(cursor.getColumnIndex(DatabaseHelper.time)));


            //You have missed to add pojo object to List<Pojo> list
            list.add(listRecord);
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    Log.e("Error 2 ", "Reached Here 2");
    return list;
}