0

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

 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相关的是最后一个插入的。

谢谢

4

2 回答 2

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

您在第二个活动中使用了 2 个 SharedPreferences 变量。第二个(您正在使用的那个)没有实例化。这将引发 NullPointer 异常。请阅读developer.google.com上有关 SQLite 和 SharedPreferences 的文档,并尝试了解代码的作用。还要尽量避免在你的代码中使用法语单词,每当来自非法语国家的人必须阅读/编辑你的代码时,它可能对他们没有意义。

于 2013-11-06T13:58:16.683 回答
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)您寻找使用它来完成表格中的更新。

给你解释清楚

你的桌子说x

活动 1 插入一行 id 1

活动 2 插入一行 id 2

活动 3 插入一行 id 3

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

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

每当您插入表格时,x您都会更新表格中的idupdatedy

所以该idupdated列总是会保存表中更新的最后一行x

于 2013-11-06T14:16:31.577 回答