есть ли способ сделать цикл для строки? Это данные моей базы данных. Я не могу использовать Int, потому что он не позволяет 0 быть первым символом.
Это мои данные. У меня две таблицы. "Donation_Details" TxnNo данные поступают из "Информация" 'unitcode + lastTxnNo'
Как увеличить число до «0012» после того, как я нажму кнопку «Сохранить»? Я должен проверять каждый раз, когда пользователи нажимают кнопку «Сохранить», она автоматически увеличивается автоматически, чтобы убедиться, что пользователь знает, сколько транзакций было создано.
это мой КОД.
BigDecimal paidAmt = new BigDecimal(D_Amount.getText().toString()).setScale(2, RoundingMode.HALF_UP);
Model txn = new Model(); // initialize your model class first
txn.setName(D_Name.getText().toString());
//txn.setTxnNo(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()); // get the entered name here.
//cv.put("TxnNo", txn.getTxnNo());
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();
Toast.makeText(Donation_Page.this, "Add successfully", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
Заранее спасибо.
вы можете сделать это, используя общие настройки,
в вашем случае инициализируйте значение int,
int id;
SharedPreferences sharedpreferences = getSharedPreferences("data-Info", Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.putString("key",id++);
editor.commit();
теперь, чтобы получить это значение с помощью предпочтений,
id=sharedpreferences.getInt("key", 0);
таким образом вам не нужно заботиться о своем идентификаторе.
Если я использую, в вашем коде есть ошибка "id ++". Я обновил последний дизайн базы данных. пожалуйста, обратитесь к более четкому дизайну ...
Попробуй это
cv.put("TxnNo", String.format("%04d", txn.getTxnNo()));
Он будет иметь нулевое заполнение длиной 4.
Редактировать
int i; // declare as global value
Button clickButton = (Button) findViewById(R.id.clickButton);
clickButton.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
i = ++i;
txn.setTxnNo(i);
cv.put("TxnNo", String.format("%04d", txn.getTxnNo()));
}
});
Чтобы число не вернулось к 0, нужно использовать SharedPreferences.
SharedPreferences app_preferences =PreferenceManager.getDefaultSharedPreferences(Activity1.this);
SharedPreferences.Editor editor = app_preferences.edit();
int i = app_preferences.getInt("key",0);
Button clickButton = (Button) findViewById(R.id.clickButton);
clickButton.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
i = ++i;
txn.setTxnNo(i+""); // set to Model class
cv.put("TxnNo", String.format("%04d", txn.getTxnNo())); // save to database and padding 0 to left
editor.putInt("key",i).commit();
}
});
Я хочу, чтобы он автоматически увеличивался ... Если использовать String, это не сработает?
Приведенный выше код будет работать, только если вы не закроете приложение. После закрытия он снова начнется с 0.
какой у тебя ++ i?
оххх. Я хочу сохранить это в базе данных
Я пробую сначала. Спасибо @John Joe
Если вы не закрываете приложение, работает ли автоинкремент?
Я использую cv.put("TxnNo", txn.getTxnNo());, Txn.getTxnNo - это ООП. как мне применить это в вашем коде?
Но строка «txn.setTxnNo (i)» говорит, что String в модели не может быть применена к (int) .... И я не могу поместить ее в «toString». Есть ли способ исправить?
куда добавить .toString()? Вы можете разместить полную строку?
Т.к. в моей базе. My TxnNo - это строка. Итак, я - целое число. Два не могут быть применены. txn.setTxnNo(i);
setTxnNo - это строка. (i) - целое число. Два не могут быть применены.
как насчет txn.setTxnNo(i+");?
Я не работаю, но мне вдруг кажется, что другие пути могут сработать. Спасибо
Вы знаете, как заставить его постоянно увеличиваться, а не возвращаться к 0? @ Джон Джо
МОЙ БОГ!! Это работает ... Вы действительно профессиональны. Большое спасибо, мой друг.
Простите за беспокойство. Вы можете сделать мне одолжение? Я не знаю, как применить общие предпочтения В моем последнем коде ... Я обновил последний код под вашим кодом ... вы можете мне помочь? @ Джон Джо
@LeonZaii Извини, я тебя не понимаю.
Рассмотрите возможность добавления нового сообщения, предоставив дополнительную информацию
Это мой новый пост ... Спасибо ссылка @John Joe
Можете ли вы обратиться туда и помочь мне решить эту проблему? @ Джон Джо
если вы просто хотите увеличить значение целого числа, просто сделайте это
String num = /*get the value from db*/;
int num1 = Integer.parseInt(num+"");
num = num1+"";
//then save the string num to the db.
но если вы хотите сохранить значение в устройстве, сохраните настройки.
private SharedPreferences pref;
pref = getApplicationContext().getSharedPreferences("valuestorage", 0); // 0 - for private mode
String num = /*get the value from db*/;
int num1 = Integer.parseInt(num+"");
num = num1+"";
pref.edit().putString("lastno",num).apply();
//then save the string num to the db.
теперь вам не нужно вызывать базу данных каждый раз, только если значение pref равно null.
так что теперь вы проверите значение из pref, увеличьте его и снова сохраните в db.
вот как: учитывая, что данные присутствуют в pref
String aa = pref.getString("lastno","");
if (!aa.equals(""))
{
String num = aa;
int num1 = Integer.parseInt(num+"");
num = num1+"";
pref.edit().putString("lastno",num).apply();
//then save the string num to the db.
}
https://developer.android.com/training/data-storage/shared-preferences
Я уже применил автоинкремент. примените его к своему требованию. id - это значение, которое обновляется каждый раз. потому что я увеличивал его, когда сохраняю его в sharedprefs.