петля не удалась, это не увеличит число, андроид студия - PullRequest
0 голосов
/ 21 сентября 2018

вы, ребята, можете помочь мне проверить, в чем проблема?Я поставил цикл для LastTxnNo , но он не увеличится автоматически.Это инициализированная база данных.

dbHelper = new dbOpenHelper(this);
        mSQLiteHelper = new dbOpenHelper(this);
        mModels = new ArrayList<>();
        mAdapter = new settingAdapter(this, R.layout.row_setting, mModels);
        listView1.setAdapter(mAdapter);

У меня есть две таблицы. Это таблица 'Donation_Details', TxnNo должен быть 'A0010001' или '0001' enter image description here

и это таблица «Информация»

enter image description here

«Donation_Details» TxnNo должен быть единичным кодом «Информация» + lastTxnNo, означает, что TxnNo должен 'A0010001».и когда я нажимаю кнопку, lastTxnNo будет увеличиваться, и оно изменится на «A0010002».Но я думаю, что упустил немного логики.

 Db_Save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Model txn = new Model();// initialize your model class first
                SettingModel txnSec = new SettingModel();

                BigDecimal paidAmt = new BigDecimal(D_Amount.getText().toString()).setScale(2, RoundingMode.HALF_UP);
                txn.setName(D_Name.getText().toString());
                txnSec.setLastTxnNo(D_Txn.getText().toString());
                txn.setTxnDate(Select_Date.getText().toString());
                txn.setAmount(paidAmt);
                txn.setDescription1(D_Description.getSelectedItem().toString());
                txn.setDescription2(Ds_Description.getText().toString());

                try {
                    SQLiteDatabase db = dbHelper.getWritableDatabase();
                    ContentValues cv = new ContentValues();
                    cv.put("name", txn.getName());
                    cv.put("TxnNo", String.format("%04d", i));
                    cv.put("TxnDate", txn.getTxnDate());
                    cv.put("Amount", txn.getAmount().toPlainString());
                    cv.put("Description1", txn.getDescription1());
                    cv.put("Description2", txn.getDescription2());
                    db.insert("Donation_Details", null, cv);
                    db.close();

                    SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(Donation_Page.this);
                    SharedPreferences.Editor editor = app_preferences.edit();
                    int i = app_preferences.getInt("key", 0);
                    i = ++i;
                    txnSec.setLastTxnNo(i + "");
                    SQLiteDatabase dbSec = dbHelper.getWritableDatabase();
                    ContentValues cvSec = new ContentValues();
                    cvSec.put("TxnNo", String.format("%04d", i));
                    editor.putInt("key", i).commit();
                    dbSec.insert("Information", null, cvSec);
                    dbSec.close();

                    Toast.makeText(Donation_Page.this, "Add successfully", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

1 Ответ

0 голосов
/ 21 сентября 2018

Вы объявили переменную внутри метода, которая получает значение из preference, поэтому каждый раз, когда новая локальная переменная (переопределенная нажатием кнопки) получает значение 0 из предпочтения, либо

  • Объявите i вне метода
  • или сохраните значение обновления обратно в предпочтение

int i = app_preferences.getInt("key", 0);
i++; // no need of i = ++i;
editor.putInt("key",i);
editor.commit(); // save value into preference

или используйте

// declare i outside method
private int i = 0;

... someMethod(){
    Db_Save.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                // ... code

                        i++;
                // ... code
                }
            });
  }
...