SharedPreference instanciation
Résolu
lukas6410
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
BunoCS Messages postés 15952 Date d'inscription Statut Modérateur Dernière intervention -
BunoCS Messages postés 15952 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je doit sauvegarder des donnés dans mon activité ,pour ça j'ai utilisé les SharedPreference ,j'ai fait des recherches et apparemment j'aurai instancié la variable au mauvaise endroit je vous donne mon code ainsi que les logs pouvez vous m'aider merci je tien à préciser que je suis sous kotlin
et voici la console debug
je doit sauvegarder des donnés dans mon activité ,pour ça j'ai utilisé les SharedPreference ,j'ai fait des recherches et apparemment j'aurai instancié la variable au mauvaise endroit je vous donne mon code ainsi que les logs pouvez vous m'aider merci je tien à préciser que je suis sous kotlin
package com.example.coockiemania import android.content.SharedPreferences import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.os.Handler import android.view.View import android.widget.* import kotlinx.android.synthetic.main.activity_main.* import java.util.* class MainActivity : AppCompatActivity() { val sharedPreference: SharedPreferences = getSharedPreferences("SAUVEGARDES",0) private val editor = sharedPreference.edit() private var compteur = sharedPreference.getInt("nbr_click",0) private var set_click_par_sec = 0 private var recup_click_par_sec = 0 private val ameliorationsPrix = Ameliorations_prix(amel1 = 10,amel2 = 100,amel3 = 1000) private val nombreAmel = Nombre_amelioration(nbr_amel1 = sharedPreference.getInt("amel1_nbr",0),nbr_amel2 = sharedPreference.getInt("amel2_nbr",0),nbr_amel3 = sharedPreference.getInt("amel3_nbr",0)) private var parSecAmel= Par_sec_amel(amel1 = 1000,amel2 = 2000,amel3 = 5000) private val myHandler: Handler = Handler() private val myRunnable = object : Runnable { override fun run() { compteur + sharedPreference!!.getInt("click_par_sec",0) compteur_click.text = compteur.toString()+"click" myHandler.postDelayed(this,500) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //compter par_sec val myHandler = Handler() myHandler.postDelayed(myRunnable,500) //define listView val listView = findViewById<ListView>(R.id.list_amel) val listAmeliorations = listOf<String>( "amelioration 1 : +1 click per sec"+ "prix :"+ (ameliorationsPrix.amel1.toString())+(nombreAmel.nbr_amel1.toString()), "amelioration 2 : +2 click per sec"+ "prix :"+ (ameliorationsPrix.amel2.toString())+(nombreAmel.nbr_amel2.toString()), "amelioration 3 : +3 click per sec"+ "prix :"+ (ameliorationsPrix.amel3.toString())+(nombreAmel.nbr_amel3.toString()) ) val adapterView = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listAmeliorations) listView.adapter = adapterView //reagir au clic d'un element listview listView.setOnItemClickListener{parent, view, position, id -> if (position==0){ Toast.makeText(this,"amelioration 1 selectionner",Toast.LENGTH_SHORT).show() if (compteur < ameliorationsPrix.amel1){ Toast.makeText(this,"achat reussi",Toast.LENGTH_SHORT).show() compteur -= ameliorationsPrix.amel1 nombreAmel.nbr_amel1 + 1 } } if (position==1){ Toast.makeText(this,"amelioration 2 selectionner",Toast.LENGTH_SHORT).show() if (compteur < ameliorationsPrix.amel2){ Toast.makeText(this,"achat reussi",Toast.LENGTH_SHORT).show() compteur -= ameliorationsPrix.amel2 nombreAmel.nbr_amel2 + 1 } } if (position==2){ Toast.makeText(this,"amelioration 3 selectionner",Toast.LENGTH_SHORT).show() if (compteur < ameliorationsPrix.amel3){ Toast.makeText(this,"achat reussi",Toast.LENGTH_SHORT).show() compteur = compteur - ameliorationsPrix.amel3 nombreAmel.nbr_amel3 + 1 } } } //imagelistener val imageView = findViewById<ImageView>(R.id.imageView) val compter_click = findViewById<TextView>(R.id.compteur_click) imageView.setOnClickListener { ++compteur compter_click.text = compteur.toString()+"click" } //ajoute textviex click_par_sec recup_click_par_sec = ((nombreAmel.nbr_amel1*parSecAmel.amel1)+(this.nombreAmel.nbr_amel2*this.parSecAmel.amel2)+(this.nombreAmel.nbr_amel1*this.parSecAmel.amel1)) set_click_par_sec = recup_click_par_sec val textView_click_sec = findViewById<TextView>(R.id.click_par_sec) textView_click_sec.setText(set_click_par_sec.toString()) } override fun onPause() { super.onPause() //savegardes //ajoute click par sec editor.putInt("click_par_sec",set_click_par_sec) //ajoute nbr_amel editor.putInt("amel1_nbr",nombreAmel.nbr_amel1) editor.putInt("amel2_nbr",nombreAmel.nbr_amel2) editor.putInt("amel3_nbr",nombreAmel.nbr_amel3) editor.putInt("nbr_click",compteur) editor.commit() } override fun onResume() { super.onResume() } override fun onStop() { super.onStop() if (myHandler != null){ myHandler.removeCallbacks(myRunnable)} } override fun onRestart() { super.onRestart() myHandler.postDelayed(myRunnable,500) } }
et voici la console debug
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.coockiemania, PID: 12732
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.coockiemania/com.example.coockiemania.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference