Saving data upon closing app and retrieving that data

后端 未结 5 1875
没有蜡笔的小新
没有蜡笔的小新 2021-01-04 01:07

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 m

相关标签:
5条回答
  • 2021-01-04 01:31

    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)."

    0 讨论(0)
  • 2021-01-04 01:31

    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);
    
    0 讨论(0)
  • 2021-01-04 01:41

    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;
        }
    }
    
    0 讨论(0)
  • 2021-01-04 01:44

    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

    0 讨论(0)
  • 2021-01-04 01:51

    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.

    0 讨论(0)
提交回复
热议问题