2016-11-12 131 views
-2

我試圖用來自用戶的輸入更新數據庫,但數據庫沒有更新。以下是我的Java代碼,其中用戶正在提供新的輸入&另一個DatabaseHelper代碼,我試圖更新數據庫。SQLite數據庫更新沒有發生

UpdateTour.java

public class TourActivity extends AppCompatActivity { 

DatabaseHelper db; 
private LayoutInflater inflater; 
private FloatingActionButton fab; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tour); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    db = new DatabaseHelper(getApplicationContext()); 

    displayList(); 
    ListView tourList = (ListView) findViewById(R.id.tour_listview); 


    tourList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      inflater = TourActivity.this.getLayoutInflater(); 
      View content = inflater.inflate(R.layout.activity_add_new_trip, null); 
      final EditText editEvent = (EditText) content.findViewById(R.id.edTxt_EventName); 
      final EditText editCashCarried = (EditText) content.findViewById(R.id.edTxt_CashCarried); 
      final EditText editOnTour = (EditText) content.findViewById(R.id.edTxt_TourCollection); 

      String ID = String.valueOf(db.getEventID(position)); 
      String NAME = db.getTourName(position + 1); 
      String CASH = db.getOnTour(position + 1); 
      String CASHCARRIED = db.getCashCarried(position + 1); 

      editEvent.setText(NAME); 
      editCashCarried.setText(CASH); 
      editOnTour.setText(CASHCARRIED); 

      AlertDialog.Builder builder = new AlertDialog.Builder(TourActivity.this); 
      builder.setView(content) 
        .setTitle("Edit Event") 
        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 

          Tour tour = new Tour(); 

          //tour.setEventId((int) System.currentTimeMillis()); 
          tour.setEventName(editEvent.getText().toString()); 
          tour.setCashCarried(editCashCarried.getText().toString()); 
          tour.setOnTourCollection(editOnTour.getText().toString()); 

          db.updatesTour(tour); 
          displayList(); 

         } 
        }) 
        .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        }); 
      AlertDialog dialog = builder.create(); 
      dialog.show(); 

      return true; 
     } 
    }); 
} 



private void displayList() { 
    ListView tourListView = (ListView) findViewById(R.id.tour_listview); 

    TourAdapter tourAdapter = new TourAdapter(
      this, 
      R.layout.tour_list, 
      db.getAllTours() 
    ); 

    tourListView.setAdapter(tourAdapter); 
    registerForContextMenu(tourListView); 
} 
} 

DBHelper.java

public boolean updatesTour(Tour tour) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_EVENTNAME, tour.getEventName()); 
    values.put(KEY_EVENTSTARTDATE, tour.getEventStartDate()); 
    values.put(KEY_EVENTENDDATE, tour.getEventEndDate()); 
    values.put(KEY_LEADERS, tour.getLeaders()); 
    values.put(KEY_CASHCARRIED, tour.getCashCarried()); 
    values.put(KEY_ONTOURCOLLECTION, tour.getOnTourCollection()); 
    values.put(KEY_CREATED_AT, getDateTime()); 
    values.put(KEY_UPDATED_AT, getDateTime()); 

    int i = db.update(TABLE_TOUR, values, KEY_ID + " = " + tour.getId(), null); 

    return i > 0; 
} 

回答

1

在OnClick方法還沒有設置遊覽對象的ID

tour.setId(ID); 

所以ID會be null

試試這個:

int i = db.update(TABLE_TOUR, values, KEY_ID + "=?" , new String[]{tour.getId()}); 
+0

Nop,這是行不通的。 –

+0

什麼是我的值 –

+0

檢查更新的答案 –