общий доступ не может получить данные - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь создать промо-код для моего приложения, когда пользователь дает правильное значение в 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 и onPause, иначе я знаю, что onCreate достаточно.Я не понимаю, что не так в алгоритме.Я не получаю никакой ошибки вообще, и в тосте я могу только уменьшить значение до 29.Я перепробовал все типы операций декремента.Любой совет будет полезен. ** Я могу сохранить данные, проблема заключается только в том, что значение lonng не сохраняется и не уменьшается <**</p>

Ответы [ 3 ]

1 голос
/ 12 марта 2019

Поместите эти методы в свой класс утилит и используйте

  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();
}
0 голосов
/ 12 марта 2019

Вам не нужно помещать общие настройки везде, просто инициализируйте их внутри метода onCreate и обращайтесь к константе String, так что к ним легко получить доступ.

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);
        }

    }
}
0 голосов
/ 12 марта 2019

Я допустил ошибку в этом методе, часть thx Ахмеду сэру. Моя ошибка заключалась в установке значения равным
if (ad > 0), поэтому, когда значение больше нуля, булево значение равно st как 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);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...