Я получаю небольшую проблему при использовании общих настроек в моем виджете. я продолжаю получать это сообщение отладки по моим общим предпочтениям, но id враги не являются ошибкой.Нет файлов или каталогов в общих предпочтениях
unable to unlink'/data/data/com.MyApps.WeatherViewer/shared_prefs/USER_PREFERENCE_WEATHER.xml.bak': No such file or directory (errno=2)
Что может быть проблемой, поскольку значения, сохраненные в моих общих настройках, возвращают значение null, когда я пытаюсь получить к ним доступ. ?
2.) Можно ли получить значения из общего предпочтения immediatelyfrom деятельности, которая создала их ..
вот мой код для создания 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();
}
Спасибо заранее
Вот мой код услуги:
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;
}
}
В первой проблеме - кажется, что не удается найти файл с именем /data/.../USER_PREFERENCE_WEATHER.xml.bak. Вы (в любое время) вручную создали копию xml, предоставляя ей расширение .bak, а затем вручную удалили ее позже? – Squonk
извините .. я только что видел ваш комментарий. Нет, я никогда не делал ничего подобного. Недавно я создал приложение, которое использовало имя USER_PREFERENCE, и я использовал одну и ту же схему имен для этого приложения. но когда я продолжал получать ту же ошибку, я теперь изменил ее на то, что она сейчас (USER_PREFERENCE_WEATHER) .. но я все еще испытываю такую же проблему. – irobotxxx