簡體   English   中英

共享的首選項無法獲取數據

[英]shared preference not able to get data

當用戶在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顯示數據,所以我要調用onResumeonPause方法,否則我知道onCreate就足夠了。 我不明白算法中有什么問題。 我一點都沒有出錯,在吐司中我只能將值減小到29。 我嘗試了所有類型的減量運算。 任何建議都會有所幫助。**我能夠保存數據,唯一的問題是lonng值未保存且未遞減**

將這些方法放在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();
}

您無需將共享的首選項放在任何地方,只需在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);
        }

    }
}

我在此方法部分中給艾哈邁德先生犯了錯誤我的錯誤是將值設置為等於
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);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM