2012-05-07 4 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

는 평소처럼 내가 부하 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 내 경우에는 작동하지 않습니다를 참조하십시오 : 여기 getSharedPreferences 기능에 대한 SDK 참조가의 정적 참조를 만들 수 없습니다 형식이 아닌 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를 기반으로 얻을 기본 설정 집합을 지정합니다. http://developer.android.com/reference/android/content/Context.html#getSharedPreferences%28java.lang.String,%20int%29

+0

에서 비 정적 메서드 getSharedPreferences()에 주석이 사라졌습니다. –

+0

와우. 내가 남긴 다섯 번째 댓글 주변에 팝업 메시지가 표시되어 채팅에 사용하고 긴 댓글 대화를 피하도록 제안했지만 안드로이드 채팅이 설정되어 승인을 받아 채팅 만 할 수있었습니다. 누군가 삭제했다면 나는 그것에 대해 의견을 남기기를 바랐을 것이다. 하지만 어쨌든 위젯과 활동이 동일한 애플리케이션에 포함되어 있는지 확인하고 검색하는 데 사용하는 것과 동일한 키를 사용하여 환경 설정을 저장하고 있는지 확인하는 것 이외에 무엇을 제안해야할지 확신 할 수 없습니다. – dwemthy

관련 문제