通过将列值设置为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(); 
} 
+0

为什么按钮调用'setContentView(R.layout.activity_main);'?如果你想加载一个新的布局,使用片段 –

+0

这不是一个问题,它只是一个测试tnk你这么多板球观察我将使用片段 –

+0

我不太明白问题出在哪里,然后...你做了使用'new Contact()',然后'SETETAT',但它不会有任何价值,因为它是一个新对象。另外,我不认为'UPDATE' sql查询返回任何东西。你需要'SELECT'更新的值 –

但是当我做我的列表中的所有联系人确认

然后将查询是错误的。

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(); 
} 
+0

我试过这个,但是项目是不可点击的你可以告诉我如何让它clickabl我迷路了 –

+0

它给了我一个错误,在这一行最后联系item = adapter.getItem(position); 它demnde将其转换为联系类型 –

+0

另一个问题在确认第一次联系之后,它不会确认没有其他人 –