在多个活动中更新数据库

时间:2013-11-06 13:46:15

标签: android android-sqlite

我再次在这里寻求帮助,现在我将详细说明我希望有人能解决的问题:在第一个活动中onClick执行方法插入

 public class ActivityUn extends Activity {

   final String PREFS_NAME = "MyPrefsFile";
  final String ID = "id";
 DBAdapter db = new DBAdapter(this); 
  public void  ajouter(View v) {

    db.open();
      Toast.makeText(getApplicationContext(), "Données enregistrées", Toast.LENGTH_LONG).show();


      SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
       long id = db.insertMENAGE(rm_1ts,rm_2ts,rm_3ts);

      prefs.edit().putLong(ID, id).commit();
           db.close();
      }

第二个活动代码是:

   public class ActivityDeux  extends Activity {


    SharedPreferences prefs2 = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    private SharedPreferences prefs;
    long id = prefs.getLong(ID, 0);

    DBAdapter db = new DBAdapter(this);
     public void  ajouter(View v) {
        db.open();


        db.insertMENAGE2(id,a16,b17,rm_18_1ts,rm_18_2ts,c19,d20,e21);
        db.close();                     
        } 

这里插入和更新两个方法......

 public long insertMENAGE(String Region, String Provence_prefecture ,StringCommune_Arrondissement) {
  ContentValues initialValues = new ContentValues();
      initialValues.put(col_Region,Region);
      initialValues.put(col_Provence_prefecture ,Provence_prefecture);
      initialValues.put(col_Commune_Arrondissement,Commune_Arrondissement);
       return db.insert(MENAGE,null, initialValues);
  }

在第二个活动中,我将通过完成行中的剩余列来更新同一个表:

  public void insertMENAGE2(int id, int a16, int b17) {
   ContentValues values = new ContentValues();
      values.put(col_Type_habitat,a16);
      values.put(col_Statut_occupation ,b17);
      db.update(MENAGE,values,_id+"="+id, null);
}

现在,我想指出表格中最后插入的行的id ( primary key )

我已经找到了解决方案,但是他们不适合我的情况,因为我有其他活动更新同一张桌子

我需要指出每次有关的id是最后一次插入。

谢谢

2 个答案:

答案 0 :(得分:2)

编辑:

public class ActivityUn extends Activity {

    final String PREFS_NAME = "MyPrefsFile";
    final String ID = "id";
    DBAdapter db = new DBAdapter(this);

    public void  ajouter(View v) {
        db.open();
        Toast.makeText(getApplicationContext(), "Données enregistrées", Toast.LENGTH_LONG).show();
        SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        long id = db.insertMENAGE(rm_1ts,rm_2ts,rm_3ts);
        prefs.edit().putLong(ID, id).commit();
        db.close();
    }
}

公共类ActivityDeux扩展了Activity {

    final String PREFS_NAME = "MyPrefsFile";
    final String ID = "id";
    DBAdapter db = new DBAdapter(this);

     public void  ajouter(View v) {
        db.open();
        SharedPreferences prefs2 = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        long id = prefs.getLong(ID, 0);
        //update the value in the table with the id you get from Sharedpreferences
        db.insertMENAGE2(id,a16,b17,rm_18_1ts,rm_18_2ts,c19,d20,e21);
        db.close();                     
    }
}

你在第二个Activity中使用2个SharedPreferences变量。第二个(你正在使用的那个)没有实例化。这将抛出NullPointer异常。 请阅读developer.google.com上有关SQLite和SharedPreferences的文档,并尝试了解代码的作用。同时尽量避免在您的代码中使用法语单词,只要来自非法语国家/地区的人必须阅读/编辑您的代码,就可能无法向他们发送。

答案 1 :(得分:1)

就像你在寻找同步工作一样。

我建议您使用只有一个值为“id”的新表

使用方法更新该值。说updatelastupdated(idofinsertedrow)

在表中插入数据时调用此方法

public long insertMENAGE(String Region, String Provence_prefecture ,StringCommune_Arrondissement) 

{

  ContentValues initialValues = new ContentValues();
      initialValues.put(col_Region,Region);
      initialValues.put(col_Provence_prefecture ,Provence_prefecture);
      initialValues.put(col_Commune_Arrondissement,Commune_Arrondissement);
      updatelastupdated(id) //ADD this method here..
       return db.insert(MENAGE,null, initialValues);

 }

现在,新表idoftheinsertedrow单元格将始终具有您要用于完成表格中更新的id(Primary key)

清楚地解释你

yourtable说x

活动1插入一行id 1

活动2插入一行id 2

活动3插入一行id 3

现在您有另一个方法update(),必须更新id 3

为此我建议另一张桌子说y

当您插入表x时,您更新表idupdated中的y

因此,idupdated列始终会保留表x

中更新的最后一行