#java #android #sharedpreferences #decrement
#java #Android #sharedpreferences #уменьшение
Вопрос:
Я пытаюсь создать промо-код для своего приложения, когда пользователь введет правильное значение в EditText
я установлю логическое значение false
, и число будет сохранено в общих настройках. Но не знаю, почему значение не уменьшается, и даже если оно уменьшается, и даже если я делаю это несколько раз, тогда оно перемещается только с 30 на 29. Итак, я создал тестовое приложение, в onClick
котором я устанавливаю значение того, что происходит, когда промо-код равен. Итак, суть в том, что когда пользователь открывает приложение, число уменьшается и сохраняется обратно, когда логическое значение равно false
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button, button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);
button1 = (Button) findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences prefs = getSharedPreferences("Admob", 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("ShowAd", false);
editor.putLong("daycounter", 30);
editor.commit();
}
});
caller();
}
@Override
protected void onResume() {
super.onResume();
caller();
}
@Override
protected void onPause() {
super.onPause();
caller();
}
public void caller() {
SharedPreferences settings = getSharedPreferences("Admob", 0);
boolean ad_start = settings.getBoolean("ShowAd", true);
long ad = settings.getLong("daycounter", 0);
SharedPreferences prefs = getSharedPreferences("apprater", 0);
SharedPreferences.Editor editor = prefs.edit();
Log.e("toaster", "" ad_start);
if (!ad_start) {
long ads = ad -1 ;
if (ad > 0) {
editor.putLong("daycounter", ads);
editor.putBoolean("ShowAd", true);
editor.commit();
Toast.makeText(MainActivity.this, "" ads, Toast.LENGTH_SHORT).show();
textView.setText(ad "R" ad_start);
}
}
}
}
В фиктивном приложении, в котором я показываю данные, TextView
поэтому я вызываю метод onResume
and onPause
, в противном случае я знаю, что onCreate
этого достаточно. Я не понимаю, что не так в алгоритме. Я вообще не получаю никакой ошибки, и в тосте я могу уменьшить значение только до 29. Я перепробовал все типы операций уменьшения. Любой совет будет полезен. ** Я могу сохранить данные, но проблема в том, что последнее значение не сохраняется и не уменьшается **
Комментарии:
1. Вы хотите уменьшать daycouter при каждом нажатии кнопки?
2. нет, когда я открываю приложение, оно уменьшается
Ответ №1:
Поместите эти методы в свой класс utils и используйте
public static void cacheBoolean(Context ctx, String k, Boolean v) {
SharedPreferences prefs = getSharedPreferences(ctx);
prefs.edit().putBoolean(k, v).apply();
}
public static Boolean getCachedBoolean(Context ctx, String k, Boolean defaultValue) {
SharedPreferences prefs = getSharedPreferences(ctx);
return prefs.getBoolean(k, defaultValue);
}
public static void cacheString(Context ctx, String k, String v) {
SharedPreferences prefs = getSharedPreferences(ctx);
prefs.edit().putString(k, v).apply();
}
public static String getCachedString(Context ctx, String k, String defaultValue) {
SharedPreferences prefs = getSharedPreferences(ctx);
return prefs.getString(k, defaultValue);
}
public static void cacheInt(Context ctx, String k, int v) {
SharedPreferences prefs = getSharedPreferences(ctx);
prefs.edit().putInt(k, v).apply();
}
public static int getCachedInt(Context ctx, String k, int defaultValue) {
SharedPreferences prefs = getSharedPreferences(ctx);
return prefs.getInt(k, defaultValue);
}
public static void clearCachedKey(Context context, String key) {
getSharedPreferences(context).edit().remove(key).apply();
}
Комментарии:
1. сэр, это простое sharepreference, я не думаю, что это имеет какое-либо значение. я знаю, как сохранить данные, и я могу сохранять и получать данные, но длинное значение не сохраняется
2. Кажется немного саморекламой, но вы можете использовать некоторые библиотеки, подобные этой , вместо того, чтобы писать так много шаблонного кода : D
Ответ №2:
Вам не нужно размещать общие настройки везде, просто инициализируйте их внутри метода onCreate и получите доступ из постоянной строки, так что к нему будет легко получить доступ.
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button, button1;
SharedPreferences prefs;
SharedPreferences.Editor editor;
final String pref_name = "Admob";
final String ad_name = "ShowAd";
final String day_count = "daycounter";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);
button1 = (Button) findViewById(R.id.button2);
prefs = getSharedPreferences(pref_name, 0);
editor = prefs.edit();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.putBoolean(ad_name, false);
editor.putLong(day_count, 30);
editor.commit();
}
});
caller();
}
@Override
protected void onResume() {
super.onResume();
caller();
}
@Override
protected void onPause() {
super.onPause();
caller();
}
public void caller() {
boolean ad_start = prefs.getBoolean(ad_name, true);
long ad = prefs.getLong(day_count, 0);
Log.e("toaster", "" ad_start);
if (!ad_start) {
long ads = ad -1 ;
if (ad < 0) {
editor.putBoolean(ad_name, true);
}
editor.putLong(day_count, ads);
editor.commit();
Toast.makeText(MainActivity.this, "" ads, Toast.LENGTH_SHORT).show();
textView.setText(ad "R" ad_start);
}
}
}
Ответ №3:
Я допустил ошибку в этой части метода, спасибо Ахмеду, сэр, Моя ошибка заключалась в установке значения, равного
if (ad > 0)
поэтому, когда значение больше нуля, логическое значение принималось как true, и данные никогда не получали шанса на большее уменьшение
public void caller() {
SharedPreferences settings = getSharedPreferences("Admob", 0);
boolean ad_start = settings.getBoolean("ShowAd", true);
long ad = settings.getLong("daycounter", 0);
Log.e("toaster", "" ad_start);
if (!ad_start) {
SharedPreferences prefs = getSharedPreferences("Admob", 0);
SharedPreferences.Editor editor = prefs.edit();
long ads = ad - 1;
if (ad < 0) {
editor.putBoolean("ShowAd", true);
}
editor.putLong("daycounter", ads);
editor.commit();
Toast.makeText(MainActivity.this, "" ads, Toast.LENGTH_SHORT).show();
textView.setText(ad "R" ad_start);
}
}