Saving data upon closing app and retrieving that data

允我心安 提交于 2019-12-18 19:08:53

问题


I know, there are plenty of questions in regards to saving/retrieving data on here. I was doing find looking things up on my own and really thought I could manage to find my answers without having to "ask a question", but I began to wonder something that I haven't seen an answer for on here.

MY SITUATION:

Naturally, I'm making an app. Upon closing the app, I want to save a simple array of numbers (0 or 1) or boolean values as it were. Upon starting the app, I want to search for that array, if it exists, and retrieve it for use within the app.

I began placing my code into the activity in which the array would be used. But, I started wondering if I would have to copy/paste the overridden onStop() function into all of my activities? Or do I do it in the main activity and somehow link the other activities.

Basically, no matter what state/activity the app is currently on when the app is closed, I want to be able to save the array of int/bool and open it back up when the app is started.

Maybe I didn't know how to search for what I wanted, so explaining it felt like the right thing to do.

I don't mind doing more searching, but if someone would point me in the right direction at the very least, I'd be extremely grateful.

EDIT: If there's a better way to do what I want than what I described (i.e. using a different state instead of onStop(), for instance), please feel free to throw out ideas. This is my first time actually having to deal with the activities' lifecycles and I'm a bit confused even after looking through the android development tutorials. I really think they're poorly done in most cases.


回答1:


When you application needs to save some persistent data you should always do it in onPause() method and rather than onStop(). Because if android OS kills your process then onStop() and onDestroy() methods are never called. Similarly retrieve data in onResume() method.




回答2:


Looking at the purpose you want to fulfill, SharedPreferences is all you want.

The documentation states:

"SharePreferences provides a general framework that allows you to save and retrieve persistent key-value pairs of primitive data types. You can use SharedPreferences to save any primitive data: booleans, floats, ints, longs, and strings. This data will persist across user sessions (even if your application is killed)."




回答3:


Use SharedPreference to store small amount of data or use SQLite to store large amount of data. See this link

http://developer.android.com/guide/topics/data/data-storage.html




回答4:


Serialize an object and pass it around which is more dependable than shared preferences (had lots of trouble with consistency with shared preferences):

public class SharedVariables {

    public static <S extends Serializable> void writeObject(
            final Context context, String key, S serializableObject) {

        ObjectOutputStream objectOut = null;
        try {
            FileOutputStream fileOut = context.getApplicationContext().openFileOutput(key, Activity.MODE_PRIVATE);
            objectOut = new ObjectOutputStream(fileOut);
            objectOut.writeObject(serializableObject);
            fileOut.getFD().sync();
        } catch (IOException e) {
            Log.e("SharedVariable", e.getMessage(), e);
        } finally {
            if (objectOut != null) {
                try {
                    objectOut.close();
                } catch (IOException e) {
                    Log.e("SharedVariable", e.getMessage(), e);
                }
            }
        }
    }

Then use a class to use:

public class Timestamps implements Serializable {

private float timestampServer;

public float getTimestampServer() {
    return timestampServer;
}

public void setTimestampServer(float timestampServer) {
    this.timestampServer = timestampServer;
}

}

Then wherever you want to write to the variable use:

SharedVariables.writeObject(getApplicationContext(), "Timestamps", timestampsData);



回答5:


Best way to achieve that is:

  • create a class. Call it MySettings, or whatever suits you
  • in this class, define the array of ints / booleans you are going to share, as static. Create getter & setter method (property) to access that (also as static methods)
  • add a static load() method to MySettings that reads from SharedPreferences. When you launch the app (in your first activity or better in a subclass of Application) call MySettings.load(). This load method sets the array
  • add a static save() method. Public also. Now you can save from anywhere in you app. This save() method reads the array and writes in SharedPreferences

Code sample:

public class MySettings {
    private static List<Integer>  data;

    public static void load() {
        data = new ArrayList<Integer>();
        // use SharedPreferences to retrieve all your data

    }

    public static void save() {
        // save all contents from data
    }

    public static List<Integer> getData() {
        return data;
    }

    public static void setData(List<Integer> data) {
        MySettings.data = data;
    }
}


来源:https://stackoverflow.com/questions/29284705/saving-data-upon-closing-app-and-retrieving-that-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!