[RISOLTO]Currency e SharedPreferences

di il
10 risposte

[RISOLTO]Currency e SharedPreferences

Da 2 giorni stò cercando di risolvere un problema, vado subito al sodo.

Ho una ListView popolata da stringhe che rappresentano le varie "valute", quando viene selezionata una, la memorizzo nella SharedPreference per poi utilizzarla nelle varie TextView...in questo modo, ad esempio:

SharedPreferences prefs = getSharedPreferences("currency", MODE_PRIVATE);
                                if (itemValue.equals(getString(R.string.c))){
                                NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
                                prefs.edit().putString("currency_code", nf.getCurrency().getCurrencyCode()).commit();
                                finish();
                                }
fin qui tutto ok.

Poi quando vado a caricarla faccio così:
inizializzo nell'onCreate la Shared

                sharedPrefs = getActivity().getSharedPreferences("currency", Context.MODE_PRIVATE);
poi nel metodo imposto la valuta alla TextView:

String defaultCurrency = Currency.getInstance(Locale.getDefault()).getCurrencyCode();
NumberFormat ca = NumberFormat.getCurrencyInstance();
ca.setCurrency(Currency.getInstance(sharedPrefs.getString("currency_code", defaultCurrency))); 
String valore = ca.format(valoredouble );
tvT.setText(valore );
a questo punto il valore della TextView viene rappresentato così:
US$ 1.000,00
invece, in questo caso Locale.US dovrebbe essere così: $ 1,000.00
Forse il problema è il NumberFormat?
Grazie per l'aiuto

10 Risposte

  • Re: [RISOLTO]Currency e SharedPreferences

    Ciao, penso proprio che il problema sia quello che dici tu! Infatti
    
    NumberFormat ca = NumberFormat.getCurrencyInstance()
    
    restituisce un NumberFormat che formatta le valute in base al default locale. Penso che usando la "versione" del metodo con 1 argomento dovresti risolvere i tuoi problemi!


    Sent from my iPhone using Tapatalk
  • Re: [RISOLTO]Currency e SharedPreferences

    Come? Grazie per il tuo aiuto
    
    private void calcola() {
    SQLiteDatabase db = mHelper.getReadableDatabase();
    String sql = "SELECT SUM(field1) FROM Mytable ";
    		Cursor c1 = db.rawQuery(sql, null);
    
    		if (c1.moveToFirst()) {
    			valoredouble = c1.getDouble(0);
    			}
    String defaultCurrency = Currency.getInstance(Locale.getDefault()).getCurrencyCode();
    NumberFormat ca = NumberFormat.getCurrencyInstance();
    ca.setCurrency(Currency.getInstance(sharedPrefs.getString("currency_code", defaultCurrency))); 
    String valore = ca.format(valoredouble );
    tvT.setText(valore );
    }
    
  • Re: [RISOLTO]Currency e SharedPreferences

    Prova con
    
    String defaultCurrency = Currency.getInstance(Locale.getDefault()).getCurrencyCode();
    NumberFormat ca = NumberFormat.getCurrencyInstance(Currency.getInstance(sharedPrefs.getString("currency_code", defaultCurrency))); 
    String valore = ca.format(valoredouble );
    
  • Re: [RISOLTO]Currency e SharedPreferences

    Qui
    		
    NumberFormat ca = NumberFormat.getCurrencyInstance(Currency.getInstance(sharedPrefs.getString("currency_code", defaultCurrency)));
    
    mi dà errore rimuovere l'argomento
    getCurrencyInstance
  • Re: [RISOLTO]Currency e SharedPreferences

    Hai ragione, il metodo vuole un parametro di tipo Locale!
    Il punto è che dalla valuta non puoi ricavare il locale associato (ad esempio per l'euro cosa metteresti?) per cui puoi fare un controllo del tipo: se la valuta è il dollaro allora uso un NumberFormat con Locale.US


    Sent from my iPhone using Tapatalk
  • Re: [RISOLTO]Currency e SharedPreferences

    Avevo pensato ad un controllo di questo tipo, ma volendo gestire una ventina di valute, dovrei fare un controllo con molti "if" e non so se è un cosa "sporca".
    In questo caso hai qualche consiglio?
  • Re: [RISOLTO]Currency e SharedPreferences

    In realtà non credo ci siano delle API apposite e, riflettendoci su, mi pare un comportamento corretto. Questo perché un utente italiano si aspetterà sempre una virgola come separatore decimale, per cui secondo me è giusto mostrare una qualsiasi valuta separata in questo modo. Ad esempio se una qualsiasi nazione adottasse una convenzione diversa per i separatori l'utente sarebbe comunque in grado di distinguere immediatamente le unità dalle decine (poiché verrà usato il Locale di default dell'utente), senza dover "imparare" i separatori di questa nazione specifica.
  • Re: [RISOLTO]Currency e SharedPreferences

    E se facessi una cosa del genere?
    in base alla scelta salvo nella Shared una stringa
    
    	SharedPreferences sharedPrefs = getSharedPreferences("currency", MODE_PRIVATE);
    	              	 	SharedPreferences.Editor editor1 = sharedPrefs.edit();
    	              	 	//salvo la scelta nella shared
    	              	 	if (itemValue.equals(getString(R.string.c))){
    	              	 		editor1.putString("ca", "canada"); 		
    	              	 		editor1.commit();
    	              	 	}
    	              	 	if (itemValue.equals(getString(R.string.ci))){
    	              	 		editor1.putString("ci","cina"); 		
    	              	 		editor1.commit();
    	              	 	}
    	              	 	if (itemValue.equals(getString(R.string.i))){
    	              	 		editor1.putString("in", "india"); 		
    	              	 		editor1.commit();
    	              	 	}
    	              	 	if (itemValue.equals(getString(R.string.co))){
    	              	 		editor1.putString("co", "coreano"); 		
    	              	 		editor1.commit();
    	               	 	}
    ...
    
    poi per settare la valuta nella TextView, utilizzo un controllo così:
    
    //setto le textview in base al valore della shared
    		if (sharedPrefs.contains("canada")){
    			NumberFormat ca = NumberFormat.getCurrencyInstance(Locale.CANADA);
    			String valore = ca.format(valore_double );
    			
    			eAnno.setText(valore );
    			
    		}
    		if (sharedPrefs.contains("cina")){
    			NumberFormat ca = NumberFormat.getCurrencyInstance(Locale.CHINA);
    			String valore = ca.format(valore_double );
    			
    			eAnno.setText(valore );
    			
    		}
    		if (sharedPrefs.contains("coreano")){
    			NumberFormat ca = NumberFormat.getCurrencyInstance(Locale.KOREA);
    			String valore = ca.format(valore_double );
    			
    			eAnno.setText(valore );
    			
    		}
    		if (sharedPrefs.contains("india")){
    			NumberFormat ca = NumberFormat.getCurrencyInstance(new Locale("en", "IN"));
    			String valore = ca.format(valore_double );
    			
    			eAnno.setText(valore );
    			
    		}else{
    			
    			NumberFormat formatter = NumberFormat.getCurrencyInstance();
    			String valore = ca.format(valore_double );
    			
    			eAnno.setText(valore );
    		}
    ...
    
    non ho ancora provato se funziona, volevo sapere da te se è un modo troppo rozzo..
    cosa suggerisci? Potrei fare con uno Switch? Grazie
  • Re: [RISOLTO]Currency e SharedPreferences

    Per funzionare funziona, a patto che ricordi di eliminare la "preferenza vecchia" (quando l'utente ne sceglie una nuova). Diciamo comunque che non è il massimo dell'eleganza, ed è anche più difficile fare manutenzione del codice..


    Sent from my iPhone using Tapatalk
  • Re: [RISOLTO]Currency e SharedPreferences

    Ok, Grazie
Devi accedere o registrarti per scrivere nel forum
10 risposte