Je rencontre un léger problème d'utilisation des préférences partagées dans mon widget. Je continue d'obtenir ce message de débogage sur ma préférence partagée, mais les ennemis d'id ne viennent pas comme une erreur.aucun fichier ou répertoire n'existe sur la préférence partagée
unable to unlink'/data/data/com.MyApps.WeatherViewer/shared_prefs/USER_PREFERENCE_WEATHER.xml.bak': No such file or directory (errno=2)
ce qui pourrait être le problème parce que les valeurs stockées dans mes préférences partagées retournent null quand j'essaye d'y accéder. ?
2.) est-il possible de récupérer des valeurs à partir d'un partage des préférences immediatelyfrom une activité qui les a créés ..
ici est mon code pour la création du SharedPreference:
public static final String USER_PREFERENCE_MODE = "USER_PREFERENCES_WEATHER";
public static final String PREF_CITY_ENTRY = "PREF_CITY_ENTRY";
public static final String PREF_TOGGLE_CELSIUS = "PREF_TOGGLE_CELSIUS";
public static final String PREF_FREQ_UPDATE = "PREF_FREQ_UPDATE";
SharedPreferences prefs;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.weather_view_configuration);
cityText =(EditText)findViewById(R.id.editCity_id);
chk_celsius = (CheckBox) findViewById(R.id.celsius_toggle_id);
save =(Button)findViewById(R.id.SaveButton);
update =(Spinner)findViewById(R.id.spinner_update_id);
cityText.setOnClickListener(this);
save.setOnClickListener(this);
prefs = this.getSharedPreferences(USER_PREFERENCE_MODE,0);
updateUIFromPreferences();
}
@Override
public void onClick(View v) {
final Context context = WeatherForecastConfigure.this;
int selection = v.getId();
switch(selection){
case R.id.SaveButton:
savePreferences();
prefs = getSharedPreferences(USER_PREFERENCE_MODE,0);
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.weather_appwidget);
String text = prefs.getString(WeatherForecastConfigure.PREF_CITY_ENTRY,null);
views.setTextViewText(R.id.weather_city_id, text);
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
widgetManager.updateAppWidget(appWidgetID, views);
}
}
private void updateUIFromPreferences() {
String cityEntry = prefs.getString(PREF_CITY_ENTRY, cityText.getText().toString());
boolean celsiusToggle = prefs.getBoolean(PREF_TOGGLE_CELSIUS, false);
int updateIndex = prefs.getInt(PREF_FREQ_UPDATE, 0);
cityText.setText(cityEntry);
update.setSelection(updateIndex);
chk_celsius.setChecked(celsiusToggle);
}
private void savePreferences() {
prefs = this.getSharedPreferences(USER_PREFERENCE_MODE,0);
int updateIndex = update.getSelectedItemPosition();
boolean celsiusToggle = chk_celsius.isChecked();
String city = cityText.getText().toString();
Editor editor = prefs.edit();
editor.putString(PREF_CITY_ENTRY, city);
editor.putBoolean(PREF_TOGGLE_CELSIUS, celsiusToggle);
editor.putInt(PREF_FREQ_UPDATE, updateIndex);
editor.commit();
}
Merci à l'avance
Voici mon code de service:
public class weatherForecast extends Service {
public static final String UPDATE = "update";
int appWidgetID = AppWidgetManager.INVALID_APPWIDGET_ID;
String city;
Boolean chk_celsius;
SharedPreferences prefs;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public void onCreate(){
Log.d(TAG, "onCreate");
prefs = getApplicationContext().getSharedPreferences(WeatherForecastConfigure.USER_PREFERENCE_MODE, 0);
city = prefs.getString(WeatherForecastConfigure.PREF_CITY_ENTRY,"");
chk_celsius = prefs.getBoolean(WeatherForecastConfigure.PREF_TOGGLE_CELSIUS, false);
Log.i(TAG, "city is " + city);
}
public void onStart(Intent intent, int startId){
URL url;
Log.d(TAG,"onStart");
Bundle extra = intent.getExtras();
if(extra != null){
appWidgetID = extra.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
Log.v("WIDGET_TAG_ID", "appWidgetId = " + appWidgetID);
}
/* prefs = this.getSharedPreferences("prefs", 0);
city = prefs.getString(WeatherForecastConfigure.PREF_CITY_ENTRY + appWidgetID,"");
chk_celsius = prefs.getBoolean(WeatherForecastConfigure.PREF_TOGGLE_CELSIUS, false);
Log.i(TAG, "city is " + city);*/
RemoteViews updateViews = buildUpdate(this);
ComponentName thisWidget = new ComponentName(this, WeatherWidgetProvider.class);
AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
widgetManager.updateAppWidget(thisWidget, updateViews);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.onStart(intent, startId);
}
public RemoteViews buildUpdate(Context context) {
GoogleWeatherHandler gwh = new GoogleWeatherHandler();
WeatherSet weather = gwh.getWeatherSet();
RemoteViews remote = RemoteViews(context.getPackageName(), R.layout.weather_appwidget);
AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
remote.setTextViewText(R.id.editCity_id,weather.getCondition().getCity().toString());
remote.setTextViewText(R.id.weather_condition_id,weather.getCondition().getCondition().toString());
remote.setTextViewText(R.id.weather_tempreture_id,weather.getCondition().getTempCelcius().toString());
widgetManager.updateAppWidget(appWidgetID, views);
return views;
}
}
Sur le premier problème - il semble qu'il ne trouve pas un fichier appelé /data/.../USER_PREFERENCE_WEATHER.xml.bak. Avez-vous (à tout moment) créé manuellement une copie du fichier xml en lui donnant l'extension .bak, puis l'avez supprimée manuellement plus tard? – Squonk
désolé..je viens de voir votre commentaire. Non, je n'ai jamais rien fait de tel. J'ai récemment créé une application qui utilisait le nom USER_PREFERENCE et j'ai utilisé le même schéma de nom pour cette application. mais quand j'ai continué à obtenir la même erreur, je l'ai maintenant changé à ce qu'il est actuellement (USER_PREFERENCE_WEATHER) .. mais j'ai toujours le même problème. – irobotxxx