2010-12-04 5 views
0

Я получаю небольшую проблему при использовании общих настроек в моем виджете. я продолжаю получать это сообщение отладки по моим общим предпочтениям, но 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; 
    } 
} 
+0

В первой проблеме - кажется, что не удается найти файл с именем /data/.../USER_PREFERENCE_WEATHER.xml.bak. Вы (в любое время) вручную создали копию xml, предоставляя ей расширение .bak, а затем вручную удалили ее позже? – Squonk

+0

извините .. я только что видел ваш комментарий. Нет, я никогда не делал ничего подобного. Недавно я создал приложение, которое использовало имя USER_PREFERENCE, и я использовал одну и ту же схему имен для этого приложения. но когда я продолжал получать ту же ошибку, я теперь изменил ее на то, что она сейчас (USER_PREFERENCE_WEATHER) .. но я все еще испытываю такую ​​же проблему. – irobotxxx

ответ

0

это выглядит Лик Ваш код попадает в «круглую проблему» из-за отсутствия лучшего термина.

Например, вы звоните

updateUIFromPreferences(); 

, который делает

String cityEntry = prefs.getString(PREF_CITY_ENTRY, cityText.getText().toString()); 
cityText.setText(cityEntry); 

тогда ваша кнопка, которая делает

String city = cityText.getText().toString(); 
editor.putString(PREF_CITY_ENTRY, city); 

Если вы не ступала cityText с фактическим значением сохранения вы просто передаете нулевое значение обратно в предпочтения. Я не могу быть уверен без всякой деятельности, но это то, что проблема от внешнего вида.

+0

извините за поздний ответ .. но когда я пытаюсь получить доступ к общим предпочтениям от класса поставщика услуг или appWidget, я получаю значения как null, которые я не понимаю. кстати, это примерно вся деятельность, которую я там. – irobotxxx

+0

, что я имел в виду, это .. updateFromPreference вызывается в методе oncreate. поэтому после ввода значения и сохранения его он загружается. но из другой службы или класса appWidget я получаю null. – irobotxxx

+0

Затем вы должны отправить свой код услуг. – user432209

Смежные вопросы