Android 如何在不同的活动中使用SQlite在ListView中推送新值

Android 如何在不同的活动中使用SQlite在ListView中推送新值,android,sqlite,listview,Android,Sqlite,Listview,我有一个主要的活动,它有一个名为person/friend和numberdebt的listview 我想做的是,当您单击一个名称时,它将移动到另一个活动,以显示相同名称的所有编号输入历史记录,因此,当我更新编号并输入新活动时,它应在listview的第一行显示初始编号,并在第二行显示我更新的编号,为此,我甚至制作了第二个表,它总是添加而不更新 发生的事情是,当我更新时,第二行确实被添加了进来,但是这两行都是相同的数字更新后的数字,当然我检查了数据库表,它确实在我输入数字时正确显示了数字,但不管我

我有一个主要的活动,它有一个名为person/friend和numberdebt的listview

我想做的是,当您单击一个名称时,它将移动到另一个活动,以显示相同名称的所有编号输入历史记录,因此,当我更新编号并输入新活动时,它应在listview的第一行显示初始编号,并在第二行显示我更新的编号,为此,我甚至制作了第二个表,它总是添加而不更新

发生的事情是,当我更新时,第二行确实被添加了进来,但是这两行都是相同的数字更新后的数字,当然我检查了数据库表,它确实在我输入数字时正确显示了数字,但不管我输入了多少数字,ListView中的所有行都将显示相同的编号,这是我为该名称更新的最后一个编号

我传递的是意图中的值,所以可能这不是正确的方法,但我不知道其他方法

以下是相关代码: 首先是我传递数据的主要活动:

private void listViewItemClick() {
    ListView listView = (ListView) findViewById(R.id.my_debts_list);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Intent intent = new Intent(MainActivity.this, ViewFriend.class);
            Cursor c = (Cursor) parent.getItemAtPosition(position);
            intent.putExtra(NAME_EXTRA, c.getString(c.getColumnIndex(String.valueOf(DBAdapter.KEY_NAME))));
            intent.putExtra(DEBT_EXTRA, c.getString(c.getColumnIndex(String.valueOf(DBAdapter.KEY_DEBT))));
            intent.putExtra(DATE_EXTRA, c.getString(c.getColumnIndex(String.valueOf(DBAdapter.KEY_DATE))));
            intent.putExtra(LABEL_EXTRA, c.getString(c.getColumnIndex(String.valueOf(DBAdapter.KEY_LABEL))));

            startActivity(intent);
        }
    });
}
现在,从数据库帮助器获取该人名的相关行的方法是:

public Cursor getByName(String name) {
    Cursor cursor =     db.rawQuery("select * from " + FRIEND_TABLE + " where " + KEY_NAME + "='" + name + "'" , null);

    if (cursor != null) {
        cursor.moveToFirst();
    }
    return cursor;
}

我想你的问题在这里

 @Override
    public void bindView(View view, final Context context, final Cursor cursor) {

        ....
        String fLabel = getIntent().getStringExtra(MainActivity.LABEL_EXTRA);
        String fDate = getIntent().getStringExtra(MainActivity.DATE_EXTRA);
        String fDebt  = getIntent().getStringExtra(MainActivity.DEBT_EXTRA);

        debt.setText(fDebt);
        label.setText(fLabel);
        date.setText(fDate);
        ...

    }
在bindView…,您将为每一行设置数据,并且通过代码为所有行设置相同的值。我的意思是相同的值,因为对于所有行,您设置了从Intent接收的数据,而Intent中的数据是不变的。 这将导致listview的所有行都具有相同的数据

下面是一个简单的示例,演示如何使用CursorAdapter绑定Sqlite中的数据

希望这对BindView有所帮助

debt.setText(fDebt);
永远都是一样的。 您必须使用游标从数据库中读取数据:

debt.setText(String.ValueOf(cursor.getDecimal(cursor.getColumnIndex("debt"))));

成功了,实际上,我已经尝试过getStringcursor.getColumnIndexphone,但它不起作用,我不知道我需要放置cursor.getString,所以非常感谢:
debt.setText(fDebt);
debt.setText(String.ValueOf(cursor.getDecimal(cursor.getColumnIndex("debt"))));