gianakakis Δημοσ. 5 Φεβρουαρίου 2012 Δημοσ. 5 Φεβρουαρίου 2012 Γεια σας φίλοι Θα ήθελα την βοήθεια σας σε σχέση με ένα πρόβλημα που αντιμετωπίζω στον προγραμματισμό μίας εφαρμογής.Βασικά θέλω να μάθω πως γίνεται να αποθηκεύω τις μεταβλητές της εφαρμογής στο τηλέφωνο με ενα κουμπί Save ας πούμε και μετά αφού κλείσω και ξανά ανοίξω την εφαρμογή να πατάω το κουμπί Load και να παίρνει τις μεταβλητές που είχε πριν το κλείσιμο. Πιο συγκεκριμένα έχω αυτήν την απλή εφαρμογή με δύο κουμπιά ένα που αυξάνει και ένα που μειώνει έναν αριθμό,πώς θα την κάνω να αποθηκεύει αυτόν τον αριθμό (μεταβλητή counter) για να μπορώ να τον φορτώσω μετά το κλείσιμο της. >import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class startingPoint extends Activity { /** Called when the activity is first created. */ int counter; Button add,sub; TextView display; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); counter = 0; add = (Button) findViewById(R.id.bAdd); sub = (Button) findViewById(R.id.bSub); display = (TextView) findViewById(R.id.tvDisplay); add.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub counter++; display.setText("Your total is " + counter); } }); sub.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub counter--; display.setText("Your total is " + counter); } }); } }
Directx Δημοσ. 5 Φεβρουαρίου 2012 Δημοσ. 5 Φεβρουαρίου 2012 Μπορείς να το κάνεις μέσο του SharedPreferences.Editor για την αποθήκευση των τιμών ως: > SharedPreferences.Editor SPE = getPreferences(MODE_PRIVATE).edit(); // Προσθήκη ενός MyValue int ίσο με 123 SPE.putInt("MyValue", 123); // Εγγραφή ρυθμίσεων στην συσκευή. SPE.commit(); Και μέσο του SharedPreferences για την ανάγνωση τους ως: > SharedPreferences SP = getPreferences(MODE_PRIVATE); // Ανάκληση και παρουσίαση του int MyValue από τις ρυθμίσεις (αν δεν υπάρχει επέστρεψε 0). Toast.makeText(this, String.format("MyValue = %d", SP.getInt("MyValue", 0)), Toast.LENGTH_LONG).show(); Οι τιμές αποθηκεύονται στο αρχείο ρυθμίσεων της εφαρμογής σου, αν θες να αποθηκεύσεις πληροφορίες μεγάλου μεγέθους καλό είναι να χρησιμοποιήσεις κάποιον άλλο μηχανισμό αλλά για μικρές, σύντομες πληροφορίες τα SharedPreferences εξυπηρετούν (σκέψου τα σαν τα INI των Windows). Για περισσότερες λεπτομέρειες δες εδώ.
gianakakis Δημοσ. 5 Φεβρουαρίου 2012 Μέλος Δημοσ. 5 Φεβρουαρίου 2012 Μπορείς να το κάνεις μέσο του SharedPreferences.Editor για την αποθήκευση των τιμών ως: > SharedPreferences.Editor SPE = getPreferences(MODE_PRIVATE).edit(); // Προσθήκη ενός MyValue int ίσο με 123 SPE.putInt("MyValue", 123); // Εγγραφή ρυθμίσεων στην συσκευή. SPE.commit(); Και μέσο του SharedPreferences για την ανάγνωση τους ως: > SharedPreferences SP = getPreferences(MODE_PRIVATE); // Ανάκληση και παρουσίαση του int MyValue από τις ρυθμίσεις (αν δεν υπάρχει επέστρεψε 0). Toast.makeText(this, String.format("MyValue = %d", SP.getInt("MyValue", 0)), Toast.LENGTH_LONG).show(); Οι τιμές αποθηκεύονται στο αρχείο ρυθμίσεων της εφαρμογής σου, αν θες να αποθηκεύσεις πληροφορίες μεγάλου μεγέθους καλό είναι να χρησιμοποιήσεις κάποιον άλλο μηχανισμό αλλά για μικρές, σύντομες πληροφορίες τα SharedPreferences εξυπηρετούν (σκέψου τα σαν τα INI των Windows). Για περισσότερες λεπτομέρειες δες εδώ. δηλαδή αν κατάλαβα σωστά θα κάνω στο κουμπί Save > SharedPreferences.Editor SPE = getPreferences(MODE_PRIVATE).edit(); SPE.putInt("MyValue", counter); //εδώ βάζω την μεταβλητή μου; SPE.commit(); και ύστερα στο Load > SharedPreferences SP = getPreferences(MODE_PRIVATE); Toast.makeText(this, String.format("MyValue = %d", SP.getInt("MyValue", 0)), Toast.LENGTH_LONG).show();
gianakakis Δημοσ. 5 Φεβρουαρίου 2012 Μέλος Δημοσ. 5 Φεβρουαρίου 2012 Ναι μπορείς να το κάνεις έτσι. Δεν ξέρω αν το έκανα σωστά (συγγνώμη αλλά εμπειρία μου είναι μικρή) >load.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub SharedPreferences SP = getPreferences(MODE_PRIVATE); Toast.makeText(this, String.format("MyValue = %d", SP.getInt("MyValue", 0)), Toast.LENGTH_LONG).show(); } }); μου βγάζει αυτό το error στην γραμμή με το toast >The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new View.OnClickListener(){}, String, int)
MeTaXaS4 Δημοσ. 5 Φεβρουαρίου 2012 Δημοσ. 5 Φεβρουαρίου 2012 το πρόβλημα είναι πως γράφεις την Toast.makeText σαν πρώτο όρισμα περιμένει Context και του δίνεις με το this , ένα OnClickListener , αντί για this βάλε getBaseContext()
gianakakis Δημοσ. 5 Φεβρουαρίου 2012 Μέλος Δημοσ. 5 Φεβρουαρίου 2012 το πρόβλημα είναι πως γράφεις την Toast.makeText σαν πρώτο όρισμα περιμένει Context και του δίνεις με το this , ένα OnClickListener , αντί για this βάλε getBaseContext() Ευχαριστώ πολύ φίλε το κατάφερα!
Directx Δημοσ. 5 Φεβρουαρίου 2012 Δημοσ. 5 Φεβρουαρίου 2012 Δεν ξέρω αν το έκανα σωστά (συγγνώμη αλλά εμπειρία μου είναι μικρή) >load.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub SharedPreferences SP = getPreferences(MODE_PRIVATE); Toast.makeText(this, String.format("MyValue = %d", SP.getInt("MyValue", 0)), Toast.LENGTH_LONG).show(); } }); μου βγάζει αυτό το error στην γραμμή με το toast >The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new View.OnClickListener(){}, String, int) Από τον κώδικα που παράθεσες αρχικά, υπέθεσα ότι θα γνώριζες την έννοια και χρήση του Context οπότε περιορίστηκα να σου δώσω ένα γρήγορο παράδειγμα χρήσης του SharedPreferences όπου το this ορίζει άμεσα το Context μας μέσο του Activity μας. Θεώρησα ότι γνωρίζεις πως να βρίσκεις πάντα το Context σου. Δεν πειράζει όμως, τέλος καλό όλα καλά, σε κάθε περίπτωση με κάλυψε ο MeTaXaS4. Καλή συνέχεια!
MeTaXaS4 Δημοσ. 5 Φεβρουαρίου 2012 Δημοσ. 5 Φεβρουαρίου 2012 τουλάχιστον έμαθα και εγώ αυτό το κομμάτι, που δεν είχα παρατηρήσει πως ακριβώς δουλεύει και σε ένα αντίστοιχο πρόβλημα που είχα έφτιαξα και αποθήκευα σε ένα txt.. Save > SharedPreferences.Editor SPE = getPreferences(MODE_PRIVATE).edit(); SPE.putInt("MyValue", counter); //εδώ βάζω την μεταβλητή μου; SPE.commit(); Load > SharedPreferences SP = getPreferences(MODE_PRIVATE); Toast.makeText(this, String.format("MyValue = %d", SP.getInt("MyValue", 0)), Toast.LENGTH_LONG).show();
gianakakis Δημοσ. 6 Φεβρουαρίου 2012 Μέλος Δημοσ. 6 Φεβρουαρίου 2012 Από τον κώδικα που παράθεσες αρχικά, υπέθεσα ότι θα γνώριζες την έννοια και χρήση του Context οπότε περιορίστηκα να σου δώσω ένα γρήγορο παράδειγμα χρήσης του SharedPreferences όπου το this ορίζει άμεσα το Context μας μέσο του Activity μας. Θεώρησα ότι γνωρίζεις πως να βρίσκεις πάντα το Context σου. Δεν πειράζει όμως, τέλος καλό όλα καλά, σε κάθε περίπτωση με κάλυψε ο MeTaXaS4. Καλή συνέχεια! Μαθαίνω σιγά σιγά ,ευχαριστώ για την βοήθεια.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα