marduc812 Δημοσ. 10 Απριλίου 2014 Δημοσ. 10 Απριλίου 2014 Για κάποιο περίεργο λόγο ενώ έχω στις shared preferences το getInt και το putInt κάποιες μεταβλητές που πρόσθετα επιπλέον δεν τις αποθηκεύει. Προσπαθώ να κάνω παιχνίδι που να μπορεί ο χαρακτήρας να ανεβαίνει επίπεδα.Και έχω κάποιες μεταβλητές. Αποθηκεύει όλες τι μεταβλητές τις παλιές και αυτές που πρόσθεσα ΄σημερα τίπτα. @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); SharedPreferences settings = getSharedPreferences("MYPREFS", 0); SharedPreferences.Editor editor = settings.edit(); editor.clear(); editor.putInt("levels",level); editor.putInt("levelmultipliers",levelmultiplier); editor.putLong("xps",xp); editor.putLong("lvlupxps",lvlupxp); editor.commit(); @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); SharedPreferences settings = getSharedPreferences("MYPREFS", 0); level=settings.getInt("levels",1); levelmultiplier = settings.getInt("levelmultipliers",5000); xp = settings.getLong("xps",0); lvlupxp = settings.getLong("lvlupxps",0); Είναι δηλωμένες και στο activity σαν int klp klp.Τι έχω λάθος έχω σκάσει.
marduc812 Δημοσ. 11 Απριλίου 2014 Μέλος Δημοσ. 11 Απριλίου 2014 Μήπως φταίει το editor.clear(); ; Όχι γιατί καθαρίζει και τα ξαναπερνάει τα καινούρια. Το περίεργο έιναι ότι πλέον crashάρουν και άλλες μετά από ένα 2ο run. Δεν μπορ΄ψ να κάνω πρόσθεση long με int αν κάνω cast το int->long? Δηλαδή. A+= (long) B;
nilosgr Δημοσ. 11 Απριλίου 2014 Δημοσ. 11 Απριλίου 2014 Ξέρω τί κάνει η clear αλλά εφ όσον δεν βλέπω όλο τον κώδικα, σου λέω να κανείς μια δομική βγάζοντας το. --Εξάλλου αφού γράφεις πάλι από πάνω με νέες τιμές, δεν υπάρχει λόγος να σβήσεις τις παλιές. Επίσης εσύ λες ότι δεν γίνεται ανάκτηση των αποθηκευμένων τιμών κι όχι ότι crashάρει κάπου. Τέλος όταν προσθέτεις long με int δε χρειάζεται cast ο int, το αποτέλεσμα είναι long. Μερικές παρατηρήσεις: Βάλε σε σταθερές (static final ή στο xml) τα key απ τα preferences Την ανάκτηση των τιμών νομίζω είναι σωστότερα να γίνεται στην onStart (όχι στην on Resume) Είσαι σίγουρος ότι χρειάζεσαι long; Ξέρεις μέχρι πόσο φτάνει ένας int;
marduc812 Δημοσ. 11 Απριλίου 2014 Μέλος Δημοσ. 11 Απριλίου 2014 Ξέρω τί κάνει η clear αλλά εφ όσον δεν βλέπω όλο τον κώδικα, σου λέω να κανείς μια δομική βγάζοντας το. --Εξάλλου αφού γράφεις πάλι από πάνω με νέες τιμές, δεν υπάρχει λόγος να σβήσεις τις παλιές. Επίσης εσύ λες ότι δεν γίνεται ανάκτηση των αποθηκευμένων τιμών κι όχι ότι crashάρει κάπου. Τέλος όταν προσθέτεις long με int δε χρειάζεται cast ο int, το αποτέλεσμα είναι long. Μερικές παρατηρήσεις: Βάλε σε σταθερές (static final ή στο xml) τα key απ τα preferences Την ανάκτηση των τιμών νομίζω είναι σωστότερα να γίνεται στην onStart (όχι στην on Resume) Είσαι σίγουρος ότι χρειάζεσαι long; Ξέρεις μέχρι πόσο φτάνει ένας int; Το βρήκα το λάθος πρέπει να έιχε γίνει λόγω copy paste από το note επειδή όταν το έγραψα ξανά απλά δούλεψε. Χρειάζομαι το lvlup και το xp να πηγαίνουν περίπου στα 13/14 ψηφία οπότε το int σε πετάει σε αρνητικό γι αυτό ήθελα long. Με το on resume δούλεψε εντάξει μια χαρά. Αν βάλω ας πούμε σε ένα class όλα τα shared preferences μπορώ απλά να καλώ το class και σε άλλα activities όπως κάνεις με απλά classes? Μήπως ξέρεις; Δηλαδή να γράφω Public Void Save() { shared klp klp. } και σε άλλο activity να το κάνω call και να δουλεύει. Ξέρω πως να καλώ classes από διαφορετικα activities απλά δεν ξέρω αν γίνεται για τα shared preferences.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα