Προς το περιεχόμενο

Android Sdk Αποθήκευση μεταβλητών;


gianakakis

Προτεινόμενες αναρτήσεις

Γεια σας φίλοι

 

 

Θα ήθελα την βοήθεια σας σε σχέση με ένα πρόβλημα που αντιμετωπίζω στον προγραμματισμό μίας εφαρμογής.Βασικά θέλω να μάθω πως γίνεται να αποθηκεύω τις μεταβλητές της εφαρμογής στο τηλέφωνο με ενα κουμπί 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);
		}
	});
   }
}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να το κάνεις μέσο του 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).

 

Για περισσότερες λεπτομέρειες δες εδώ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να το κάνεις μέσο του 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();

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι μπορείς να το κάνεις έτσι.

Δεν ξέρω αν το έκανα σωστά (συγγνώμη αλλά εμπειρία μου είναι μικρή)

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

το πρόβλημα είναι πως γράφεις την Toast.makeText σαν πρώτο όρισμα περιμένει Context και του δίνεις με το this , ένα OnClickListener , αντί για this βάλε getBaseContext()

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

το πρόβλημα είναι πως γράφεις την Toast.makeText σαν πρώτο όρισμα περιμένει Context και του δίνεις με το this , ένα OnClickListener , αντί για this βάλε getBaseContext()

Ευχαριστώ πολύ φίλε το κατάφερα!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν ξέρω αν το έκανα σωστά (συγγνώμη αλλά εμπειρία μου είναι μικρή)

 

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

 

Καλή συνέχεια!

:)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

τουλάχιστον έμαθα και εγώ αυτό το κομμάτι, που δεν είχα παρατηρήσει πως ακριβώς δουλεύει και σε ένα αντίστοιχο πρόβλημα που είχα έφτιαξα και αποθήκευα σε ένα 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();

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Από τον κώδικα που παράθεσες αρχικά, υπέθεσα ότι θα γνώριζες την έννοια και χρήση του Context οπότε περιορίστηκα να σου δώσω ένα γρήγορο παράδειγμα χρήσης του SharedPreferences όπου το this ορίζει άμεσα το Context μας μέσο του Activity μας. Θεώρησα ότι γνωρίζεις πως να βρίσκεις πάντα το Context σου. Δεν πειράζει όμως, τέλος καλό όλα καλά, σε κάθε περίπτωση με κάλυψε ο MeTaXaS4.

 

Καλή συνέχεια!

:)

Μαθαίνω σιγά σιγά :) ,ευχαριστώ για την βοήθεια.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...