通过将列值设置为1来确认联系人
我已经在管理员的活动中列出了我的联系人列表,通过将etat
的值从0更改为1列来确认他们,但是当我这样做时,列表中的所有联系人都是证实通过将列值设置为1来确认联系人
数据库:
public void SETETAT(Contact e) {
//helper.insertContact(c);
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
String query=" update contacts set etat='1' where id="+COLUMN_ID;
Cursor ce=db.rawQuery(query ,null);
int count=ce.getCount();
e.getId();
e.getEmail();
e.getName();
e.getPass();
e.getPhone();
e.getRepass();
values.put(COLUMN_ETAT, e.getEtat());
db.insert(TABLE_NAME, null, values);
db.close();
}
列表
public class Tab2 extends Activity implements OnItemClickListener{
Cursor cursor;
DatabaseHelper db;
String info;
ListView datalist;
ArrayList<String> databaseList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.onglet1);
db = new DatabaseHelper(this);
datalist = (ListView) findViewById(R.id.liste);
List<Contact> values = db.getAllContact();
ArrayAdapter<Contact> adapter = new ArrayAdapter<Contact>(Tab2.this,
android.R.layout.simple_list_item_1, values);
datalist.setAdapter(adapter);
datalist.setOnItemClickListener(this);
}
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
Log.i("HelloListView", "You clicked Item: " + id + " at position:" + position);
Intent intent = new Intent();
intent.setClass(this, Approuver.class);
intent.putExtra("position", position);
intent.putExtra("id", id);
startActivity(intent);
}
}
这里的按钮代码
public void con(View v) {
Contact e=new Contact();
helper.SETETAT(e);
Toast m = Toast.makeText(Approuver.this, "demande approuvé", Toast.LENGTH_SHORT);
setContentView(R.layout.activity_main);
m.show();
}
但是当我做我的列表中的所有联系人确认
然后将查询是错误的。
String query=" update contacts set etat='1' where id="+COLUMN_ID;
你可以在Android以外的地方玩SQLite。这可能是调试问题的好方法。
如果我理解正确的,但是,你正在试图单击时更新行的接触。
为了做到这一点,我认为您应该使用可用的Contact.getID()
方法。
因此,移动适配器/清单到成员变量
ArrayAdapter<Contact> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.onglet1);
db = new DatabaseHelper(this);
datalist = (ListView) findViewById(R.id.liste);
adapter = new ArrayAdapter<Contact>(Tab2.this,
android.R.layout.simple_list_item_1, db.getAllContact());
datalist.setAdapter(adapter);
然后,在听者,你希望只更新您单击的项目。我不明白你所谓的不必要的get方法,或者是带有内容值的插入查询。
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
final Contact item = adapter.getItem(position);
SQLiteDatabase database = db.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("etat", 1);
database.update("contacts", values, "id=?", new String[] { String.valueOf(item.getId()) });
database.close();
}
我试过这个,但是项目是不可点击的你可以告诉我如何让它clickabl我迷路了 –
它给了我一个错误,在这一行最后联系item = adapter.getItem(position); 它demnde将其转换为联系类型 –
另一个问题在确认第一次联系之后,它不会确认没有其他人 –
为什么按钮调用'setContentView(R.layout.activity_main);'?如果你想加载一个新的布局,使用片段 –
这不是一个问题,它只是一个测试tnk你这么多板球观察我将使用片段 –
我不太明白问题出在哪里,然后...你做了使用'new Contact()',然后'SETETAT',但它不会有任何价值,因为它是一个新对象。另外,我不认为'UPDATE' sql查询返回任何东西。你需要'SELECT'更新的值 –