我希望變量r是全局變量,並且我希望SharedPreferences能夠在全局級別上加載變量r(String s)。需要在setOnClickListener方法中輸入變量
我在做什麼就像一個人工機器人HUNGER變量。我點擊按鈕,它增加了+1飢餓感,但是我想每秒鐘給它-1飢餓時間戳。此外,時間戳用作指示器設備已脫機多久,並且它會按比例提供-xx。
從現在起,我只能在onClickListener中增加+1給R,因爲r是本地聲明的,所以如果(時間已經縮短){r = r-1},我不能給它。我不知道如何把它弄出來。
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView broj;
private TextView tekst1;
private TextView posljednjeVrijeme;
String stringTStamp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* Ponavlja radnju svakih 4 sekunde, učitava vrijeme systema
*/
final Handler ha=new Handler();
ha.postDelayed(new Runnable() {
@Override
public void run() {
Long tStamp = System.currentTimeMillis()/1000;
stringTStamp = tStamp.toString();
Toast.makeText(MainActivity.this, stringTStamp, Toast.LENGTH_SHORT).show();
SharedPreferences preferences3 = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences3.edit();
editor.putString("posljednjeVrijeme", stringTStamp);
editor.apply();
ha.postDelayed(this, 4000);
}
}, 4000);
/**
* **************************************************************
*/
broj = (TextView)findViewById(R.id.broj);
posljednjeVrijeme = (TextView)findViewById(R.id.posljednjeVrijeme);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
final String name = preferences.getString("vrijednost je ", "");
final String name2 = preferences.getString("posljednjeVrijeme", "");
if(!name.equalsIgnoreCase(""))
{
broj.setText("vrijednost je "+name);
posljednjeVrijeme.setText("Zadnje vrijeme "+name2);
}
Long tStamp = System.currentTimeMillis()/1000;
stringTStamp = tStamp.toString();
if(Integer.parseInt(stringTStamp)-Integer.parseInt(name2)>10){
Toast.makeText(this, "POZDRAV GAZDA DUGO SE NE VIDJEH, UGASIO SI ME PRIJE " + (Integer.parseInt(stringTStamp)-Integer.parseInt(name2))+ " SEKUNDI" , Toast.LENGTH_SHORT).show();
}else{
}
tekst1 = (TextView)findViewById(R.id.tekst1);
final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
tekst1.setOnClickListener(new View.OnClickListener() {
int r = 0+Integer.parseInt(name);
@Override
public void onClick(View v) {
r = r+1;
broj.setText("vrijednost je "+r);
String s= String.valueOf(r);
SharedPreferences.Editor editor = preferences2.edit();
editor.putString("vrijednost je ", s);
editor.apply();
}
});
}
}
那麼不要在本地聲明它嗎? –
使用Firebase Job Scheduler(更具電池友好性)或Alarm Manager - >以定時間隔啓動服務 - >檢索並編輯sharedPreferences變量。你的r,如果它只是一個int,所以可以把它作爲一個首選項存儲。 –
如果我將其聲明爲globaly,則需要進行最終處理。我無法完成它,因爲它一直在改變價值。 –