Android Studio - Загрузка RecyclerView из базы данных SQLite, ввод слова в Edittext - PullRequest
2 голосов
/ 23 января 2020

Я работаю над Android Studio, и у меня есть таблица с 3 записями, загруженными в БД SQLite в моем проекте.

public class BaseDeDatos extends SQLiteOpenHelper {

public BaseDeDatos(Context context, String s, Context applicationContext, int i) {
    super(context, "verbos.db", null, 10);
}

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table verbos(id integer, verbos text, referencia text, eu text, voce text, nos text)");
        db.execSQL("insert into verbos values(1, 'agito', 'abalo', 'abala', 'abalamos', 'abalam')," +
                "(1, 'agito', 'abalava', 'abalava', 'abalávamos', 'abalavam')," +
                "(1, 'agito', 'abalei', 'abalou', 'abalamos', 'abalaram')");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("DROP TABLE IF EXISTS verbos");
        db.execSQL("create table verbos(id integer, verbos text, referencia text, eu text, voce text, nos text)");
        db.execSQL("insert into verbos values(1, 'agito', 'abalo', 'abala', 'abalamos', 'abalam')," +
                "(1, 'agito', 'abalava', 'abalava', 'abalávamos', 'abalavam')," +
                "(1, 'agito', 'abalei', 'abalou', 'abalamos', 'abalaram')");
    }
}

И это моя деятельность "Verbos2", где я нахожусь работает:

public class Verbos2 extends AppCompatActivity {

ArrayList<Item> listaItem;
RecyclerView recyclerViewItem;
EditText etVerbos;
Button mostrar;

BaseDeDatos conn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.verbos2);

    etVerbos = findViewById(R.id.etIngresar);
    mostrar = findViewById(R.id.bnMostrar);

    listaItem = new ArrayList<>();
    recyclerViewItem=findViewById(R.id.rvListItems);
    LinearLayoutManager manager = new LinearLayoutManager(this);
    recyclerViewItem.setLayoutManager(manager);
    recyclerViewItem.setHasFixedSize(true);

    RecyclerViewAdapter adapter = new RecyclerViewAdapter(listaItem);
    recyclerViewItem.setAdapter(adapter);

 //   recyclerViewItem.setLayoutManager(new LinearLayoutManager(this));


    mostrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BaseDeDatos admin = new BaseDeDatos(getApplicationContext(), "verbos.db", getApplicationContext(), 10);
            SQLiteDatabase db = admin.getReadableDatabase();
            Item item = null;
            String[] parametros = {etVerbos.getText().toString()};
            Cursor cursor=db.rawQuery("select * from verbos WHERE verbos =?", parametros);

            while (cursor.moveToNext()){
                item = new Item();
                item.setVerbo(cursor.getString(0));
                item.setReferencia(cursor.getString(1));
                item.setEu(cursor.getString(2));

                listaItem.add(item);
            }
        }
    });

}
}

Я пытаюсь загрузить свой Recycler View с данными в моей базе данных SQLite, когда я устанавливаю слово «agito» в EditText, (он должен принести мне информацию из 3 записей в моей базе данных, потому что «agito» в поле «verbo» есть во всех записях), но когда я пишу и нажимаю на кнопку, ничего не происходит. Там нет ошибки, просто ничего не появляется в RecyclerView:

Это изображение макета просмотра переработчика, чтобы лучше понять меня:

enter image description here

Это мое задание Recycler View:

public class RecyclerViewAdapter extends RecyclerView.Adapter {
private ArrayList<Item> listItem ;

public RecyclerViewAdapter(ArrayList<Item> listItem) {
    this.listItem = listItem;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View contentView = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista, parent, false);
    System.out.println("CREATE VIEW HOLDER: " + viewType);
    return new Holder(contentView);

}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    Item item = listItem.get(position);
    Holder Holder = (Holder) holder;
    Holder.tvVerbo.setText(item.getVerbo());
    Holder.tvReferencia.setText(item.getReferencia());
    Holder.tvEu.setText(item.getEu());

    System.out.println("BIND VIEW HOLDER: " + position);
}

@Override
public int getItemCount() {
    return listItem.size();
}

public class Holder extends RecyclerView.ViewHolder{
    TextView tvVerbo;
    TextView tvReferencia;
    TextView tvEu;


    public Holder(View itemView) {
        super(itemView);
        tvVerbo = itemView.findViewById(R.id.tvLista1);
        tvReferencia = itemView.findViewById(R.id.tvLista2);
        tvEu = itemView.findViewById(R.id.tvLista3);
    }
}

}

Я думаю, что мне чего-то не хватает в "Verbos2", чтобы получить данные из моей базы данных SQLite и загрузить их в мое представление Recycler .

Буду так благодарен, если вы поможете мне.

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Попробуйте установить attachToRoot в onCreateViewHolder на false
Будет:

 View contentView = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista, false);
0 голосов
/ 23 января 2020

Вы используете context.getSystemService где-то в вашем коде. Контекст, который вы используете, является нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...