Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
980 views
in Technique[技术] by (71.8m points)

android - SharedPreferences.getBoolean returns true everytime

I made a class for handling important data changes such as App Purchase Status and other stuff .

For this goal I have created a class which does the setting and reading of the values. but the problem is whenever I call the appIsPurchased() method, the result is true while it hasen't been changed since app installation and its first initial launch.

This is my code:

/**
 * Created by neemasa on 5/29/14.
 * This class handles more crucial data values within app.
 */
public class AppCore {

    private SharedPreferences settings;
    private String keyPurchase = "app_purchased";
    private Context context;

    public AppCore(Context context){
        this.context = context;
        settings = PreferenceManager.getDefaultSharedPreferences(context);
    }

    public void setAppInPurchasedMode(String status){
        if (status.equals("successful")){
            settings.edit().putBoolean(keyPurchase, true).commit();
        }else if (status.equals("failed")){
            settings.edit().putBoolean(keyPurchase, false).commit();
        }

    }
    public boolean appIsPurchased(){
        boolean purchased = false;
        if (settings.getBoolean(keyPurchase,true)){
            purchased = true;
        }
        return purchased;
    }

}


Question 1st: is there something wrong with my code? if there is then why appIsPurchased() always return true?
Question 2nd: do all values in the shared preferences are true by default?

Meanwhile when I use this class in my code the toast "Purchased!" runs even when app is running for the first time.

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

        AppCore appCore = new AppCore(getApplicationContext());
        if (appCore.appIsPurchased()){
            Toast.makeText(getApplicationContext(),"Purchased!",Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(getApplicationContext(),"Not Purchased!",Toast.LENGTH_SHORT).show();
        }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Actually there is a problem in your code!! thats why its always showing purchased!!

 if (settings.getBoolean(keyPurchase,true)){
            purchased = true;
        }

in this lines if the keyPurchased tag if not used , u are passing true value by default so when u call

if (appCore.appIsPurchased()){

it always return a true value.. The solution is that make sure that the preference values are set before u call them.. hope this helps


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...