2013-02-21 1 views
0

Я пытаюсь изменить переменную (счастье) из моего MainActivity.class SharedPrefs всякий раз, когда запущена служба. Я не могу понять, как это сделать. Ниже приведен мой код. Мой результат заканчивается счастьем = -1, который из-за prefEditor.putInt Я понимаю, но не знаю, как продолжить модификацию и возврат значения.Измените переменную из MainActivity в моем классе Service, затем обновите TextView с помощью переменной

public class MainActivity extends Activity { 

int Health = 100; 
private static final int Happiness = 100; 
int Hunger = 0; 
int Level = 1; 
EditText happiness_display, 
     health_display, 
     hunger_display, 
     level_display; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     SharedPreferences settings = getSharedPreferences("APP_PREFS", 
                MODE_PRIVATE); 
     SharedPreferences.Editor prefEditor = settings.edit(); 
     prefEditor.putInt("HAPPINESS", Happiness); 
     prefEditor.commit(); 

     WebView myWebView = (WebView) findViewById(R.id.pet_display); 
     myWebView.loadUrl("file:///android_asset/renamon.gif"); 
     myWebView.setInitialScale(10000); 


     ShowToast(); 

     TextView happiness = (TextView) findViewById(R.id.happiness_display); 
     happiness.setText(Integer.toString(Happiness)); 

     Calendar cal = Calendar.getInstance(); 

     Intent intent = new Intent(this, chronos.class); 
     PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 

     AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 

     // Start every 30 seconds 
     alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 
    } 


    private void ShowToast() { 
     Toast.makeText(getApplicationContext(), "Toast method invoked from on create " + Happiness, Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

public class chronos extends Service { 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     SharedPreferences settings = getSharedPreferences("APP_PREFS", 
       MODE_PRIVATE); 
     SharedPreferences.Editor prefEditor = settings.edit(); 
     prefEditor.putInt("HAPPINESS", - 1); 
     prefEditor.commit(); 
     Toast.makeText(getBaseContext(), "Chronos running" + settings.getInt("HAPPINESS", 0), Toast.LENGTH_LONG).show(); 


     return super.onStartCommand(intent, flags, startId); 
    } 
} 

Любая оцененная помощь или точку в правильном направлении, если моя методология неправильно (вероятно, является: P)

Это, вероятно, моя непоследовательность, но я в основном хотят, чтобы изменить значение Счастья, Здоровье и т. Д. Каждый раз, когда служба запускается, Как игровой цикл, но для виртуальных домашних животных.

Пример код в моем IntentService

happiness = happiness - 1; 
     SharedPreferences.Editor prefEditor = settings.edit(); 
     prefEditor.putInt("HAPPINESS", happiness); 
     prefEditor.commit(); 

Я просто хочу каждый сервис работает для того, чтобы вычесть определенную сумму от некоторых переменных.

+0

проверить мой ответ – moDev

ответ

0

Попробуйте это.

Прежде всего, используйте IntentService вместо Service, поскольку он блокирует поток пользовательского интерфейса.

Как это

public class chronos extends IntentService { 

    int happiness; 
    public chronos() { 
     super("chronos"); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     // TODO Auto-generated method stub 

     SharedPreferences settings = getSharedPreferences("APP_PREFS", 
       MODE_PRIVATE); 

      happiness = settings.getInt("HAPPINESS",0) - 1; 

      SharedPreferences.Editor prefEditor = settings.edit(); 
      prefEditor.putInt("HAPPINESS",happiness); 
      prefEditor.commit(); 

     Toast.makeText(getBaseContext(), 
       "Chronos running" + settings.getInt("HAPPINESS", 0), 
       Toast.LENGTH_LONG).show(); 

    } 

} 

Если вы хотите обновить TextView-значения из MainActivity от службы, необходимо использовать BroadcastReceiver

+0

Что бы не изменить значение переменной Счастья, которая хранится SharedPref Ключ «СЧАСТЬЕ»? Сообщение о тосте, которое я должен уточнить, предназначено для отладки, например, значение, которое оно отображает, равно «-1», а не новое значение счастья, которое должно быть «99» (100-1) – Pheonix2105

+0

. Он не может выполнять арифметическую операцию, вам нужно сделать это отдельно, а затем сохранить результат обратно в «Общие настройки». – moDev

+0

Не могли бы вы объяснить, как сделать арифметику, пожалуйста? – Pheonix2105

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