Mon application a beaucoup de cases à cocher, un spinner, edittext et un bouton. Lorsque je choisis un élément du spinner et que j'entre une certaine valeur et que j'appuie sur un bouton, un certain texte de case à cocher change. Maintenant j'ai ajouté des préférences partagées et j'ai deux problèmes.Les préférences partagées ne fonctionnent pas, les valeurs par défaut
Le premier problème est que lorsque j'essaie d'utiliser des préférences partagées, l'application se bloque (dès que je lance l'activité contenant ces préférences partagées).
private String getItemQuantity(String key){
SharedPreferences itemQuantitySP = getApplicationContext().getSharedPreferences("bifrostPrefs", android.content.Context.MODE_PRIVATE);
String sp1 = "sp1";
return itemQuantitySP.getString(key, sp1);
}
private void saveItemQuantity(String key, String value){
SharedPreferences itemQuantitySP = getApplicationContext().getSharedPreferences("bifrostPrefs", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = itemQuantitySP.edit();
editor.putString(key, value);
editor.commit();
}
sharedpreferences Enregistrement:
if (Integer.parseInt(quantityEditText.getText().toString()) == 250)
{
cb4.setText("Elaborate Totem (" + item1 + "/250)");
saveItemQuantity("cb4", cb4.getText().toString());
cb4.setChecked(true);
}
... //REST OF THE CODE
Obtenir sharedpreferences:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bifrost);
getItemQuantity("cb4");
... //REST OF THE CODE
Le deuxième problème est que j'ai beaucoup de cases à cocher et la mise en valeur par défaut pour chacun d'entre eux seraient très long. Alors, y a-t-il un moyen de simplement lire la valeur par défaut de XML? Comme vous pouvez le voir, pour l'instant, j'ai créé une nouvelle variable appelée sp1 et l'ai définie comme valeur par défaut, mais bien sûr, je veux m'en débarrasser.
fichier Logcat:
06-27 16:31:44.782: E/AndroidRuntime(13139): FATAL EXCEPTION: main
06-27 16:31:44.782: E/AndroidRuntime(13139): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matthewstudios.gw2legendary/com.example.gw2legendary.Bifrost}: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.os.Looper.loop(Looper.java:137)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-27 16:31:44.782: E/AndroidRuntime(13139): at java.lang.reflect.Method.invokeNative(Native Method)
06-27 16:31:44.782: E/AndroidRuntime(13139): at java.lang.reflect.Method.invoke(Method.java:511)
06-27 16:31:44.782: E/AndroidRuntime(13139): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-27 16:31:44.782: E/AndroidRuntime(13139): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-27 16:31:44.782: E/AndroidRuntime(13139): at dalvik.system.NativeStart.main(Native Method)
06-27 16:31:44.782: E/AndroidRuntime(13139): Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224)
06-27 16:31:44.782: E/AndroidRuntime(13139): at com.example.gw2legendary.Bifrost.getItemQuantity(Bifrost.java:849)
06-27 16:31:44.782: E/AndroidRuntime(13139): at com.example.gw2legendary.Bifrost.onCreate(Bifrost.java:152)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.Activity.performCreate(Activity.java:5104)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-27 16:31:44.782: E/AndroidRuntime(13139): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-27 16:31:44.782: E/AndroidRuntime(13139): ... 11 more
06-27 16:31:49.391: E/fb4a(:<default>):MmsConfig(13225): MmsConfig.loadMmsSettings mms_config.xml missing uaProfUrl setting
Une partie du code:
public void submitQuantityButton (View v){
final Spinner sItems = (Spinner)findViewById(R.id.spinner1);
final Context context = this;
final CheckBox cb4 = (CheckBox) findViewById(R.id.checkBox4);
final CheckBox cb5 = (CheckBox) findViewById(R.id.checkBox5);
final CheckBox cb6 = (CheckBox) findViewById(R.id.checkBox6);
final CheckBox cb7 = (CheckBox) findViewById(R.id.checkBox7);
final CheckBox cb9 = (CheckBox) findViewById(R.id.checkBox9);
final CheckBox cb10 = (CheckBox) findViewById(R.id.checkBox10);
final CheckBox cb11 = (CheckBox) findViewById(R.id.checkBox11);
final CheckBox cb12 = (CheckBox) findViewById(R.id.checkBox12);
final CheckBox cb13 = (CheckBox) findViewById(R.id.checkBox13);
final CheckBox cb15 = (CheckBox) findViewById(R.id.checkBox15);
final CheckBox cb16 = (CheckBox) findViewById(R.id.checkBox16);
final CheckBox cb17 = (CheckBox) findViewById(R.id.checkBox17);
final CheckBox cb18 = (CheckBox) findViewById(R.id.checkBox18);
final CheckBox cb25 = (CheckBox) findViewById(R.id.checkBox25);
final CheckBox cb27 = (CheckBox) findViewById(R.id.checkBox27);
final CheckBox cb28 = (CheckBox) findViewById(R.id.checkBox28);
final CheckBox cb29 = (CheckBox) findViewById(R.id.checkBox29);
final CheckBox cb30 = (CheckBox) findViewById(R.id.checkBox30);
final CheckBox cb31 = (CheckBox) findViewById(R.id.checkBox31);
final CheckBox cb33 = (CheckBox) findViewById(R.id.checkBox33);
final CheckBox cb34 = (CheckBox) findViewById(R.id.checkBox34);
final CheckBox cb35 = (CheckBox) findViewById(R.id.checkBox35);
final CheckBox cb36 = (CheckBox) findViewById(R.id.checkBox36);
final CheckBox cb37 = (CheckBox) findViewById(R.id.checkBox37);
//WRONG VALUE ERROR
final AlertDialog.Builder wrongValueBuilder = new AlertDialog.Builder(context);
wrongValueBuilder.setTitle("Warning");
wrongValueBuilder.setMessage("The value you entered is too high!");
wrongValueBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
//EMPTY TEXT ERROR
final AlertDialog.Builder emptyETextErrorBuilder = new AlertDialog.Builder(context);
emptyETextErrorBuilder.setTitle("Warning");
emptyETextErrorBuilder.setMessage("Please enter a value before pressing this button");
emptyETextErrorBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
final int position = sItems.getSelectedItemPosition();
EditText quantityEditText = (EditText)findViewById(R.id.editText1);
switch (position){
case 0:
AlertDialog.Builder spinnerErrorBuilder = new AlertDialog.Builder(context);
spinnerErrorBuilder.setTitle("Warning");
spinnerErrorBuilder.setMessage("Please choose an item from the list above and then enter a certain value");
spinnerErrorBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog spinnerError = spinnerErrorBuilder.create();
spinnerError.show();
break;
case 1:
String item1 = quantityEditText.getText().toString();
if (item1.matches(""))
{
AlertDialog emptyETextError = emptyETextErrorBuilder.create();
emptyETextError.show();
}
else
{
if (Integer.parseInt(quantityEditText.getText().toString()) <= 250)
{
if (Integer.parseInt(quantityEditText.getText().toString()) == 250)
{
cb4.setText("Elaborate Totem (" + item1 + "/250)");
saveItemQuantity("cb4", cb4.getText().toString());
cb4.setChecked(true);
}
else
{
cb4.setText("Elaborate Totem (" + item1 + "/250)");
saveItemQuantity("cb4", cb4.getText().toString());
cb4.setChecked(false);
}
}
Pourriez-vous poster une erreur que vous obtenez en utilisant 'SharedPreferences'? –
Afficher le code original – Blackbelt
Publié le fichier logcat, toujours s'interroger sur les valeurs par défaut tho. @blackbelt voulez-vous dire en fait le code java entier? Parce qu'il est vraiment très long – Guy