2015-05-18 3 views
0

Я работаю с SQLite Android, и у меня ошибка, когда я пытаюсь обновить таблицу во второй раз, и я понятия не имею, что не так с моим кодом. Первое обновление работает нормально.Android SQLite - второе обновление всегда возвращается 0

Кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно? Заранее спасибо.

Это функция я использую, чтобы обновить таблицу:

public boolean updateEvents(int id, boolean shown){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 

    contentValues.put(EVENTS_COLUMN_SHOWN, shown); 

    int result = db.update(EVENTS_TABLE_NAME, contentValues, EVENTS_COLUMN_ID_EVENTS + " = ?", new String[]{Integer.toString(id)}); 
    Log.d(DBHelper.class.getSimpleName(),"update result: "+result); 
    return result==1; 
} 

Я называю эту функцию после окончания doInBackground() в классе AsyncTask. Это класс, который вызывает эту функцию обновления:

private class GetEvents extends AsyncTask<Void,Void,Events>{ 
     private DBHelper dbHelper; 
     @Override 
     protected Events doInBackground(Void... voids) { 
      try{ 
       if(new Connection().GetEvents() && Settings.events.size()>0){ 
        dbHelper = new DBHelper(FirstActivity.this); 
        for(int i=0; i<Settings.events.size(); i++){ 
         dbHelper.recordEvents(Settings.events.get(i),dbHelper.isEventsShown(Settings.events.get(i).id_event)); 
        } 
        for(int a=0; a<Settings.events.size(); a++){ 
         boolean shown = dbHelper.isEventsShown(Settings.events.get(a).id_event); 
         Log.d(FirstActivity.class.getSimpleName(),"shown "+a+": "+shown); 
         if(Settings.events.get(a).isEnabled() && Settings.events.get(a).isEventValid() && !shown){ 
          return Settings.events.get(a); 
         } 
        } 
       } 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Events events) { 
      if(events!=null){ 
       dbHelper.updateEvents(events.id_event, true); 
       showPopUp(events); 
      } 
      super.onPostExecute(events); 
     } 
    } 
+0

Не могли бы вы объяснить, что и как ваше возвращение работает в updateEvents? – Thealon

+0

Вы проверили, соответствует ли event.id_event для первого и второго обновления? – dora

+0

@Thealon работает, если db.update возвращает 1 и мою таблицу событий с указанным событием event_id. Он работает в первом обновлении, он возвращает 1, а моя таблица обновляется. но второе обновление не удается, мои данные не меняются. –

ответ

0

Я не уверен, если я понял, что вы пытаетесь достичь, но я дал ему try.Try ниже код и дайте мне знать.

private class GetEvents extends AsyncTask<Void,Void,ArrayList<Events>>{ 
private DBHelper dbHelper; 
@Override 
protected Events doInBackground(Void... voids) { 
    ArrayList<Events> pendingEvents = new ArrayList<Events>(); 
    try{ 
     if(new Connection().GetEvents() && Settings.events.size()>0){ 
      dbHelper = new DBHelper(FirstActivity.this); 
      for(int i=0; i<Settings.events.size(); i++){ 
       dbHelper.recordEvents(Settings.events.get(i),dbHelper.isEventsShown(Settings.events.get(i).id_event)); 
      } 
      for(int a=0; a<Settings.events.size(); a++){ 
       boolean shown = dbHelper.isEventsShown(Settings.events.get(a).id_event); 
       Log.d(FirstActivity.class.getSimpleName(),"shown "+a+": "+shown); 
       if(Settings.events.get(a).isEnabled() && Settings.events.get(a).isEventValid() && !shown){ 
        pendingEvents.add(Settings.events.get(a)); 
        // return Settings.events.get(a); 
       } 
      } 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
    return pendingEvents; 
} 

@Override 
protected void onPostExecute(ArrayList<Events> events) { 
    if(events!=null){ 
     for(Events events1:events){ 
     dbHelper.updateEvents(events1.id_event, true); 
     } 
     showPopUp(events); 
    } 
    super.onPostExecute(events); 
} 
} 

Проблема (если я правильно понял) является то, что вы возвращаете doInBackground метод, как только вы нашли одно событие. Вот почему я включил все такие события в список и вернул, если он повторил его полный список Settings.events.

Смежные вопросы