Получение одинаковых значений для двух разных ключей в общих настройках

я создаю приложение, в котором существуют разные режимы платежей, поэтому для карточных платежей и чековых платежей я создал два разных действия, в которых я получаю данные от пользователя и сохраняю данные в общих настройках, а затем приложение возвращается обратно к действиям, где другие подробности также есть, а затем пользователь может сохранить данные одним нажатием кнопки. Эти данные сохраняются в базе данных Sqlite. Моя проблема заключается в том, что когда я выбираю платеж по карте, он сохраняется правильно, но то же значение также сохраняется при проверке Нет, а также в базе данных sqlite. Короче говоря, значение платежа по карте по умолчанию копируется в столбец проверки без.

ниже мой код для платежной карты:

public class CardNo extends Activity {

String bankname;
String cardno;
int chq;
TextView textView1, textView2;
EditText editText1, editText2;
Button btn;


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.creditdebit);

    textView1 = (TextView) findViewById(R.id.tv1);
    textView2 = (TextView) findViewById(R.id.tv2);
    editText1 = (EditText) findViewById(R.id.bankname);
    editText2 = (EditText) findViewById(R.id.cardno);
    btn = (Button) findViewById(R.id.btn1);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            saveData();

            Intent card = new Intent(CardNo.this, EnterAmount.class);
            startActivity(card);
            finish();
        }
    });

}

private void saveData() {

    bankname = editText1.getText().toString();
    cardno = editText2.getText().toString();


    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("Bank Name", bankname);
    editor.putString("Card No", cardno);
    editor.apply();


}
}

Теперь код для чековой платежной активности:

     public class Cheque extends Activity  {
String bankname1;
String chequeno;
int chq;
TextView textView1,textView2;
EditText editText1,editText2;
Button btn;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cheque);


    textView1=(TextView)findViewById(R.id.tv11);
    textView2=(TextView)findViewById(R.id.tv12);
    editText1=(EditText)findViewById(R.id.bankname1);
    editText2=(EditText)findViewById(R.id.chequeno);
    btn=(Button)findViewById(R.id.btn11);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            saveData();

            Intent cheque = new Intent(Cheque.this, EnterAmount.class);

            startActivity(cheque);
            finish();

        }
    });

}

private void saveData() {

    bankname1 = editText1.getText().toString();
    chequeno = editText2.getText().toString();


    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("Bank Name", bankname1);
    editor.putString("Cheque No", chequeno);
    editor.apply();

}
}

Теперь код действия, в котором я извлекаю данные из общих настроек и сохраняю данные в sqlite.

     public class EnterAmount extends Activity implements OnClickListener {
    Intent intent;
    Button save;
    Spinner spinnerPayment, spinnerCategory;
    EditText etamt, etbdgt, et_get_other;
    String date, sBdgt, budget, bankname, cardno, chequeno;
    String sAmt;
    String spinnerItemSelectedPayment;
    String spinnerItemSelectedCategory;
    // String category;
    int amt;
    int date2;
    TextView caategories, tv_cat;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.enteramount);

            save = (Button) findViewById(R.id.bsaveDb);
            caategories = (TextView) findViewById(R.id.tvCaategories);
            etamt = (EditText) findViewById(R.id.etAmount);
            etbdgt = (EditText) findViewById(R.id.etbudget);

            spinnerCategory = (Spinner) findViewById(R.id.spinnerCategory);

            spinnerPayment = (Spinner) findViewById(R.id.payment_spinner);

            List<String> sCategory = new ArrayList<String>();
            String[] categories = {"Food", "Bills",
                    "Travel", "Entertainment", "Office Stationary",
                    "Medical Expenses", "Fuel"
            };

            sCategory.add("Food");
            sCategory.add("Office Stationary");
            sCategory.add("Bills");
            sCategory.add("Travel");
            sCategory.add("Entertainment");
            sCategory.add("Medical Expenses");
            sCategory.add("Fuel");

            ArrayAdapter<String> sc = new ArrayAdapter<String>(this,
                    android.R.layout.simple_spinner_dropdown_item, sCategory);
            spinnerCategory.setAdapter(sc);


            List<String> l = new ArrayList<String>();
            String[] paymentMode = {"Cash", "Credit/Debit Card", "Cheque", "NetBanking"};
            l.add("Cash");
            l.add("Credit/Debit Card");
            l.add("Cheque");
            l.add("NetBanking");
            ArrayAdapter<String> sp = new ArrayAdapter<String>(this,
                    android.R.layout.simple_spinner_dropdown_item, l);
            spinnerPayment.setAdapter(sp);

            save.setOnClickListener(this);


            spinnerCategory.setOnItemSelectedListener(new OnItemSelectedListener() {

                public void onItemSelected(AdapterView<?> parent,
                                           View selectedItemView, int pos, long id) {
                    spinnerItemSelectedCategory = parent.getItemAtPosition(pos)
                            .toString();



                }

                public void onNothingSelected(AdapterView<?> parentView) {
                    spinnerItemSelectedCategory = "Food";
                }
            });

            spinnerPayment.setOnItemSelectedListener(new OnItemSelectedListener() {

                public void onItemSelected(AdapterView<?> parent,
                                           View selectedItemView, int pos, long id) {
                    spinnerItemSelectedPayment = parent.getItemAtPosition(pos).toString();

                    if (spinnerItemSelectedPayment.equals("Cheque")) {
                        Intent cheque = new Intent(EnterAmount.this, Cheque.class);
                        cheque.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(cheque);


                    } else if (spinnerItemSelectedPayment.equals("Credit/Debit Card")) {

                        Intent card = new Intent(EnterAmount.this, CardNo.class);
                        card.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(card);


                    }
                }

                public void onNothingSelected(AdapterView<?> parentView) {
                    spinnerItemSelectedPayment = "Cash";

                }
            });


            final Calendar c = Calendar.getInstance();

            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy-HH:mm:ss ");

            date = sdf.format(c.getTime());


            int yy = c.get(Calendar.YEAR);
            int mm = c.get(Calendar.MONTH) + 1;
            int dd = c.get(Calendar.DAY_OF_MONTH);

            String s = yy + "" + (mm < 10 ? ("0" + mm) : (mm)) + ""
                    + (dd < 10 ? ("0" + dd) : (dd));

            Log.e("datechange", s);

            date2 = Integer.parseInt(s);
            Log.e("integer2", "hello" + date2);

        }


        @Override
        public void onBackPressed () {

            super.onBackPressed();
            finish();

        }

    private void vibrate(int ms) {
        ((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).vibrate(ms);
    }


    private void loadSavedPreferences() {

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        budget = sharedPreferences.getString("Budget", " ");

getSharedPreferences(mypreference,Context.MODE_PRIVATE);
        bankname = sharedPreferences.getString("Bank Name", "Not Applicable");
        cardno = sharedPreferences.getString("Card No", "Not Applicable");
        chequeno = sharedPreferences.getString("Cheque No", "Not Applicable");


    }

    private void removeSavedPreferences() {

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.remove("Bank Name");
        editor.remove("Cheque No");
        editor.remove("Card No");
        editor.apply();
    }

    private void savePreferences(String key, String value) {

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();


    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bsaveDb: {

                savePreferences("Budget", etbdgt.getText().toString());
                loadSavedPreferences();



                sAmt = etamt.getText().toString();


                Log.e("category", "Hello" + sAmt);
                try {
                    amt = Integer.parseInt(sAmt);
                    Log.e("amt is", "" + amt);

                } catch (Exception e) {


                }


                DbClass dc = new DbClass(this);
                dc.open();

                if (amt == 0) {

                    Toast.makeText(getApplicationContext(),
                            "Please insert the amount", Toast.LENGTH_SHORT).show();
                } else {


                    dc.categoryDetailsInsert(amt, spinnerItemSelectedCategory, date, spinnerItemSelectedPayment, date2, bankname, cardno, chequeno);
                    dc.close();
                    Toast.makeText(getApplicationContext(), "Saved successfully",
                            Toast.LENGTH_LONG).show();
                    amt = 0;
                    etamt.setText("");
                    etbdgt.setText(budget);
                    removeSavedPreferences();


                }

                break;

            }
        }
    }
     }

я прилагаю скриншот базы данных sqlite, и вы можете видеть, что имя банка сохраняется правильно, но номер карты и номер чека всегда одинаковы в отношении платежа. Скриншот базы данных


person Community    schedule 24.03.2017    source источник
comment
Используйте другой ключ, отличный от названия банка и номера чека, для общих предпочтений при оплате чеком, поскольку они уже используются в операции оплаты картой.   -  person void pointer    schedule 24.03.2017
comment
@voidpointer нет проблем с названием банка, оно хранится правильно, и я не определил «Проверить отсутствие внутренней платежной операции по карте». см., что я прикрепил рассматриваемый скриншот только сейчас, см. только последние 4-5 записей.   -  person    schedule 24.03.2017


Ответы (2)


Прикрепите свои ключи к тегу контекста, чтобы предотвратить переопределение значений. например: String TAG = "ContextName или ActivityName";

затем при сохранении выполните:

pref.put(TAG+ключ, "значение");

person Evans Samoei    schedule 24.03.2017
comment
и как получить эти значения в других действиях? - person ; 24.03.2017

На самом деле приведенный выше код в порядке. Проблема была в коде, где я извлекал код из базы данных, я вставил один и тот же номер индекса для двух разных столбцов. поэтому я получал одинаковые значения для номера чека и номера дебетовой карты.

person Community    schedule 27.03.2017