2012-05-07 7 views
0

私は、データベースからユーザーのためにいくつかのデータを表示するウィジェットを作成しています。データの1つは、自分の設定アクティビティで設定できるパラメータに依存します。このパラメータはsharedpreferencesで保存するので、コード内のどこでも使用できます。 アクティビティでgetApplicationContextを使用できますが、ここでウィジェットに何をすべきかを伝えるところでは、動作しません。 getApplicationContextの代わりに何を使うべきですか?AppWidgetProviderでSharedPreferencesが機能しません(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

は、いつものように私は、負荷funcitonの操作を行います。通常の活動にこれにより

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は、私の場合には動作しません参照してください:static参照できません非静的メソッドgetSharedPreferences()型PreferenceManagerから –

答えて

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

うわー。私はこれをチャットに持ち帰り、長いコメントの会話を避けることを提案していた5番目のコメントの周りにポップアップメッセージを表示しましたが、Androidチャットが設定されているので、承認を得てチャットできました。誰かがそれを削除した場合、私は彼らがそれについてコメントを残すことを望んでいたでしょう。しかし、とにかく、あなたのウィジェットとアクティビティが同じアプリケーションの一部であることを確認し、あなたがそれらを取得するために使用する同じキーを使用して環境設定を保存していることを確認する以外に、 – dwemthy

関連する問題