2016-12-19 4 views
0

Когда я обновляю выбранную строку, она обновляет неправильную строку, например, если я выбираю вторую строку, она обновит первую строку.listview-SQLite обновление неправильной строки

Вот мой код внутри контроллера

Public boolean updateContact (String id, String category, String code, String description, String unit, String quantity) { 

    SQLiteDatabase database = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put(FeedReaderContract.FeedEntry.Col_2 , category); 
    values.put(FeedReaderContract.FeedEntry.Col_3 , code); 
    values.put(FeedReaderContract.FeedEntry.Col_4 , description); 
    values.put(FeedReaderContract.FeedEntry.Col_5 , unit); 
    values.put(FeedReaderContract.FeedEntry.Col_6 , quantity); 
    // updating row 
    database.update(TABLE_NAME ,values , FeedReaderContract.FeedEntry.Col_1 + " = ?" , new String[]{id}); 
    return true; 

} 
public ArrayList<HashMap<String, String>> getAllProducts() { 
    ArrayList<HashMap<String, String>> proList; 
    proList = new ArrayList<HashMap<String, String>>(); 
    String selectQuery = "SELECT * FROM Countsheet"; 
    SQLiteDatabase database = this.getWritableDatabase(); 
    Cursor cursor = database.rawQuery(selectQuery, null); 
    if (cursor != null && cursor.moveToFirst()) { 
     do { 

      HashMap<String, String> map = new HashMap<String, String>(); 

      map.put("Category", cursor.getString(1)); 
      map.put("Code", cursor.getString(2)); 
      map.put("Description", cursor.getString(3)); 
      map.put("Unit", cursor.getString(4)); 
      map.put("Quantity", cursor.getString(5)); 
      proList.add(map); 

     } while (cursor.moveToNext()); 
     cursor.close(); 

    } 

    return proList; 

} 

дб Вот моя кнопка OnClick обновить ListView:

Public void adddata(){ 
     btnadddata.setOnClickListener(
       new View.OnClickListener(){ 
        @Override 
        public void onClick(View v) { 
         boolean i = myDb.updateContact(passid , passedVar , passcode, passdesc, passunit , quantitys.getText().toString()); 

          if (i == true) 
           Toast.makeText(Main2Activity.this , "Data Inserted" , Toast.LENGTH_SHORT).show(); 
          else 
           Toast.makeText(Main2Activity.this , "Data Not Inserted" , Toast.LENGTH_SHORT).show(); 
        } 
       } 
     ); 
    } 
+0

Откуда вы получаете 'passid'? –

+0

Попробуйте этот database.update (TABLE_NAME, значения, FeedReaderContract.FeedEntry.Col_1 + "=" + id, null); – VVB

+0

привет спасибо за ваш ответ, но все еще не работает, я получил passid с использованием намерения получить string.valueof (id), затем я использую getintent, чтобы получить значение id и приравнять его к textview passid – RaRa

ответ

0

HEY GUYSSSS СПАСИБО ВАМ ОТВЕТСТВЕННОСТЬ Я ОБРАЩАЮСЬ ВАС ВСЕМИ, Я ТОЛЬКО ПОЛУЧИЛ ОТВЕТ ОТ ВАС, ЧТО Я ТОЛЬКО ДОБАВЛЯЮТ 1 К STRING.VALUEOF (ID) И ЭТО ПРОСТО РАБОТАЕТ СПАСИБО ВАМИ ГУСНЫ!

// вот мой код

intent.putExtra (ID_EXTRA1, String.valueOf (ID + 1)); startActivity (намерение);

0

Я думаю, вам не хватает 'passid'.

Поместите 'passid' в свой HashMap, извлекая из базы данных, а затем извлеките.

+0

hi ithink мой код неправильный вот где я получаю свой passid // mainactivity intent.putExtra (ID_EXTRA1, String.valueOf (id)); // mainactivity2 passid = getIntent(). getStringExtra (MainActivity.ID_EXTRA1); passidtext = (TextView) findViewById (R.id.textView5); passidtext.setText ("ID:" + passid + ""); – RaRa

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