Android - 我无法从 SQLite 数据库更新数据

勒米努尔

我是在 Android 应用程序中使用 SQL 的新手,并且我在更新我使用我使用的 listView 创建的表时遇到了一些麻烦。我设法从 listView 更新了一个元素,但它不是正确的元素,它始终是列表中第一个发生变化的元素。

我制作了一个只有一列的表格(稍后我将添加更多两列),这是我构建它的方式:

TaskContract_Faltas.java

class TaskContract_Faltas {
  static final String DB_NAME = "com.example.TodoList.db.tasks";
  static final int DB_VERSION = 1;
  static final String TABLE = "tasks";

  class Columns {
      static final String TASK = "task";
      static final String _ID = BaseColumns._ID;
  }
}

TaskDbHelper_Faltas

class TaskDbHelper_Faltas extends SQLiteOpenHelper {

TaskDbHelper_Faltas(Context context) {
    super(context, TaskContract_Faltas.DB_NAME, null, TaskContract_Faltas.DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase sqlDB) {
    String sqlQuery =
            String.format("CREATE TABLE %s (" +
                            "_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                            "%s TEXT)", TaskContract_Faltas.TABLE,
                    TaskContract_Faltas.Columns.TASK);

    Log.d("TaskDBHelper","Query to form table: "+sqlQuery);
    sqlDB.execSQL(sqlQuery);
}

@Override
public void onUpgrade(SQLiteDatabase sqlDB, int i, int i2) {
    sqlDB.execSQL("DROP TABLE IF EXISTS "+TaskContract_Faltas.TABLE);
    onCreate(sqlDB);
}
}

法尔塔斯.java

ListView lista;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.faltas2);
    setTitle("Gerenciador de Faltas");

    lista = (ListView) findViewById(R.id.lista_falta);

    updateUI();

}

//...

public void edita_Materia(View view){

    final Dialog dialog = new Dialog(Faltas2.this);
    dialog.setContentView(R.layout.janela_faltas_add);

    TextView titulo = (TextView) dialog.findViewById(R.id.Titulo_Dialog);
    titulo.setText("Editar Matéria");

    Button cancelarBotao = (Button) dialog.findViewById(R.id.botao_cancelar);
    Button aceitarBotao = (Button) dialog.findViewById(R.id.botao_aceitar);
    final EditText nome_materia = (EditText) dialog.findViewById(R.id.texto_disciplina_falta);

    // The error starts here
    TextView texto = (TextView) findViewById(R.id.Titulo_disciplina);
    nome_materia.setText(texto.getText().toString(), TextView.BufferType.EDITABLE);

    final String teste = texto.getText().toString();
    // From here        

    cancelarBotao.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    aceitarBotao.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String task = nome_materia.getText().toString();

            String sql = String.format("UPDATE %s SET %s = '%s' WHERE %s = '%s'",
                    TaskContract_Faltas.TABLE,
                    TaskContract_Faltas.Columns.TASK,
                    task,
                    TaskContract_Faltas.Columns.TASK,
                    teste);

            Log.d("Faltas2", "A ID eh: " + TaskContract_Faltas.Columns._ID);

            helper = new TaskDbHelper_Faltas(Faltas2.this);
            SQLiteDatabase sqlDB = helper.getWritableDatabase();
            sqlDB.execSQL(sql);
            updateUI();
            dialog.dismiss();
        }
    });

    dialog.show();
}

private void updateUI() {

    helper = new TaskDbHelper_Faltas(Faltas2.this);
    SQLiteDatabase sqlDB = helper.getReadableDatabase();
    Cursor cursor = sqlDB.query(TaskContract_Faltas.TABLE,
            new String[]{TaskContract_Faltas.Columns._ID, TaskContract_Faltas.Columns.TASK},
            null, null, null, null, null);

    ListAdapter listAdapter = new SimpleCursorAdapter(
            this,
            R.layout.item_todo,
            cursor,
            new String[]{TaskContract.Columns.TASK},
            new int[]{R.id.Titulo_disciplina},
            0
    );
    lista.setAdapter(listAdapter);
    visi_info();
}

我调用更新函数到item_todo.xml文件中android:onClick="edita_Materia"

<!-- ... -->
<ImageButton
    android:id="@+id/botao_editar"
    android:src="@drawable/ic_edit_black_24dp"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:onClick="edita_Materia"
    android:background="@drawable/botao_borda_falta"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:contentDescription="@string/botao_materia" />
<!-- ... -->

我知道我没有得到正确的 ID,但我似乎无法找到从 listView 中获取正确元素的方法。如果你看一下就String sql行,我只从比较字符串数据的行中到达元素,而不是通过 Id。有人可以帮我吗?谢谢!

编辑:来自列表本身的图像。listView 的图像示例。

椰浆饭

单击按钮 acceitarBotao 时,您是否尝试更新列表项?如果是这样,我建议调用一个函数,该函数从 sqlite 获取该 sprcific ID 的数据(单击的列表项的位置是 id)并更新该特定列表项,然后调用方法 notifyDatasetChanged,以通知适配器该 sprcific list项目已更改,因此它将正确更新列表视图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQLite数据库更新一行Android

来自分类Dev

尝试在android sqlite中更新数据库时出错

来自分类Dev

PDO SQLite无法更新记录:“数据库已锁定”

来自分类Dev

无法打开数据库Android Java SQLite

来自分类Dev

如何在不访问上下文的情况下从线程更新我的Android SQLite数据库?

来自分类Dev

如何从另一个活动创建的数据库中获取数据/无法将数据更新到数据库(Android Studio,SQLite)

来自分类Dev

无法访问Android的SQLITE数据库

来自分类Dev

如何修复我的Android SQLite数据库?

来自分类Dev

无法将数据插入android studio sqlite数据库

来自分类Dev

无法从android中的sqlite数据库加载图像

来自分类Dev

尝试将我的sqlite数据库导入Android

来自分类Dev

更新我的SQLite数据库时出现问题

来自分类Dev

无法打开数据库android Sqlite

来自分类Dev

无法更新sqlite数据库中的记录

来自分类Dev

无法查询Android SQLite数据库

来自分类Dev

从sqlite数据库android写入数据

来自分类Dev

删除行后,SQLite数据库无法正确更新

来自分类Dev

无法在Android SQlite数据库中插入数据

来自分类Dev

尝试在android sqlite中更新数据库时出错

来自分类Dev

我无法删除Sqlite数据库中的数据

来自分类Dev

在Android sqlite数据库中更新单个数据

来自分类Dev

Android SQLite数据库“ R无法解析为变量”

来自分类Dev

Android无法在SQLite数据库更新时转义单引号字符

来自分类Dev

无法在android中创建Sqlite数据库

来自分类Dev

如何在android sqlite中更新数据库表?

来自分类Dev

尝试在Android中更新sqlite数据库时出错

来自分类Dev

在Android中删除或更新SQLite数据库中的条目

来自分类Dev

无法在android中的Sqlite数据库中保存数据?

来自分类Dev

Android 无法创建 SQLite 数据库

Related 相关文章

  1. 1

    SQLite数据库更新一行Android

  2. 2

    尝试在android sqlite中更新数据库时出错

  3. 3

    PDO SQLite无法更新记录:“数据库已锁定”

  4. 4

    无法打开数据库Android Java SQLite

  5. 5

    如何在不访问上下文的情况下从线程更新我的Android SQLite数据库?

  6. 6

    如何从另一个活动创建的数据库中获取数据/无法将数据更新到数据库(Android Studio,SQLite)

  7. 7

    无法访问Android的SQLITE数据库

  8. 8

    如何修复我的Android SQLite数据库?

  9. 9

    无法将数据插入android studio sqlite数据库

  10. 10

    无法从android中的sqlite数据库加载图像

  11. 11

    尝试将我的sqlite数据库导入Android

  12. 12

    更新我的SQLite数据库时出现问题

  13. 13

    无法打开数据库android Sqlite

  14. 14

    无法更新sqlite数据库中的记录

  15. 15

    无法查询Android SQLite数据库

  16. 16

    从sqlite数据库android写入数据

  17. 17

    删除行后,SQLite数据库无法正确更新

  18. 18

    无法在Android SQlite数据库中插入数据

  19. 19

    尝试在android sqlite中更新数据库时出错

  20. 20

    我无法删除Sqlite数据库中的数据

  21. 21

    在Android sqlite数据库中更新单个数据

  22. 22

    Android SQLite数据库“ R无法解析为变量”

  23. 23

    Android无法在SQLite数据库更新时转义单引号字符

  24. 24

    无法在android中创建Sqlite数据库

  25. 25

    如何在android sqlite中更新数据库表?

  26. 26

    尝试在Android中更新sqlite数据库时出错

  27. 27

    在Android中删除或更新SQLite数据库中的条目

  28. 28

    无法在android中的Sqlite数据库中保存数据?

  29. 29

    Android 无法创建 SQLite 数据库

热门标签

归档