2012-05-07 24 views
0

我正在创建一个小部件,它将显示数据库中用户的某些数据。其中一个数据取决于可以在我的设置活动中设置的参数。我用sharedpreferences保存了这个参数,所以我可以在我的代码中的任何地方使用它。 在一个活动中,我可以使用getApplicationContext,但在这里我告诉小部件该怎么做,它不工作。我应该用什么来代替getApplicationContext?Sharedpreferences不适用于appWidgetProvider(getApplicationContext未定义)

修订

public class plWidget extends AppWidgetProvider{ 

    SharedPreferences sharedPreferences; 
    String loadedWeightType; 

    @Override 
    public void onDeleted(Context context, int[] appWidgetIds) { 
     // TODO Auto-generated method stub 
     super.onDeleted(context, appWidgetIds); 
     Toast.makeText(context, "deleted", 2500).show(); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
     // TODO Auto-generated method stub 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 

     String Wcal="0",Wfat="0",Wprot="0",Wcarb="0",Wsport="0"; 

     final int N = appWidgetIds.length; 

     for (int i = 0;i<N;i++) 
     { 
      int awID = appWidgetIds[i]; 
      updateAppWidget(context, appWidgetManager, appWidgetIds[i]); 

      GlobalVars.setSulyType(loadedWeightType);   
     Log.i("SULYYYY", GlobalVars.getSulyType()); 

     long now = System.currentTimeMillis(); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
     Date resultdate = new Date(now); 
     Log.i("ASAS", sdf.format(resultdate)); 


     hornot database = new hornot(context); 
     database.open(); 



     int ccc = database.checkDataExists(sdf.format(resultdate), sdf.format(resultdate)); 
     if (ccc==0){ 
      Log.i("nulla", "0"); 
      Log.i("nulla", GlobalVars.getSulyType()); 

      Wcal="0"; 
      Wfat="0"; 
      Wprot="0"; 
      Wcarb="0"; 
     } 

     else{ 

     database.getDateFromAndToFromDatePicker(sdf.format(resultdate), sdf.format(resultdate)); 
     Wcal = GlobalVars.getSums(); 

     database.FATgetDateFromAndToFromDatePicker(sdf.format(resultdate), sdf.format(resultdate)); 
     Wfat = GlobalVars.getSums(); 

     database.PROTEINgetDateFromAndToFromDatePicker(sdf.format(resultdate), sdf.format(resultdate)); 
     Wprot = GlobalVars.getSums(); 

     database.CARBSgetDateFromAndToFromDatePicker(sdf.format(resultdate), sdf.format(resultdate)); 
     Wcarb = GlobalVars.getSums(); 

       } 

     int ddd = database.checkDataExistsSports(sdf.format(resultdate), sdf.format(resultdate)); 
     if (ddd==0){ 
      Wsport="0"; 

     } 
     else{ 

      if (loadedWeightType.equals("kilogramm")) 
        { 
      database.SportgetDateFromAndToFromDatePicker(sdf.format(resultdate), sdf.format(resultdate)); 
      // Wsport = GlobalVars.getSums(); 
      Wsport= "kilogramm"; 


        } 
      else if (loadedWeightType.equals("pound")) 
        { 
      database.SportgetDateFromAndToFromDatePicker(sdf.format(resultdate), sdf.format(resultdate)); 
      Wsport="pound"; 
        } 

     } 

     RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.widget); 
     v.setTextViewText(R.id.tvwidgetUpdate, Wcal+Wfat+Wprot+Wcarb+Wsport); 
     appWidgetManager.updateAppWidget(awID, v); 
     database.close(); 



     } 


    } 

    public void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { 
     SharedPreferences prefs = context.getSharedPreferences(plWidget.class + Integer.toString(appWidgetId), 
       Context.MODE_WORLD_READABLE); 
     loadedWeightType= prefs.getString("weighttype", "kilogramm"); 
    } 

} 

提前感谢!

UPDATE

照例我做负载功能可按:

public void LoadWeightType(){ 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     loadedWeightType= sharedPreferences.getString("weighttype", "kilogramm"); 
     } 

采用这种在正常活性,我可以加载weighttype。我想updateAppWidget函数应该以某种方式取代这个函数。

+1

请参阅http://stackoverflow.com/questions/2748268/get-preferences-in-appwidget-provider – Jack

+0

getSharedPreferences并不在我的情况下工作:不能使静态参考从类型为PreferenceManager的非静态方法getSharedPreferences() –

回答

1
public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { 
SharedPreferences prefs = context.getSharedPreferences(MyConfigActivity.NAME + Integer.toString(appWidgetId), Context.MODE_WORLD_READABLE); 

我从onUpdate为我的窗口小部件的每个实例调用updateAppWidget,传递参数。传入的上下文中定义了getSharedPreferences,并且我根据配置活动的名称和小部件的ID指定要获取的首选项集。下面是该getSharedPreferences功能的SDK参考:http://developer.android.com/reference/android/content/Context.html#getSharedPreferences%28java.lang.String,%20int%29

+0

评论消失??! –

+0

哇。我留下了建议采取这种聊天方式并避免长时间评论对话的第五条评论的消息,但Android聊天已建立,因此您只能通过批准进行聊天。如果有人删除了他们,我希望他们会留下评论。但无论如何,除了确保您的小部件和活动是同一应用程序的一部分,并确保您使用用于检索它们的相同密钥来存储您的首选项之外,我不确定还有什么建议。 – dwemthy

相关问题