我希望变量r是全局的,我希望SharedPreferences能够在全局级别加载变量r(String s)。
我制作的东西就像人工机器人HUNGER变量。我点击按钮,它增加了+1饥饿,但每一秒我想给它-1时间戳的饥饿。此外,时间戳还可用作指示设备离线多长时间,并按比例提供-xx。
截至目前,我只能在onClickListener中添加+1到R的局部变量,如果(时间已经过时)我不能给它{r = r-1},因为r是localy声明的。我不知道如何解决它。
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();
}
});
}
}
答案 0 :(得分:1)
您可以创建公共类说Hunger.java
并向其添加静态变量public static int r
。然后使用Handler或Looper在您的Activity
onCreate(),按时间戳递增:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
while(<your timestamp condition>){
Hunger.r = Hunger.r - 1;
}
}
});
在退出onDestroy()
中的应用之前,您可以将Hunger.r
的值保存在SharedPreferences
中。
<强>的onDestroy()强>
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("myvar",Hunger.r);
editor.commit();
当应用重新启动时,您可以从SharedPreferences加载r
的最后一个值。如果您希望在应用离线时继续递减r,则可以在AsyncTask
中执行此操作或声明Service
。
您可以从onCreate()
中的SharedPreferences中检索r的值,并设置静态变量Hunger.r的值
onCreate() [在应用重新启动时初始化静态变量]
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
Hunger.r = pref.getInt("myvar");
您的textView.onClickListerner可能就像这样
tekst1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Hunger.r = Hunger.r + 1;
broj.setText("vrijednost je "+r);
}
}
在原始代码中,每次更新饥饿变量时,您都会反复写入SharedPreferences。以这种方式写入数据会不必要地影响性能。
希望这有帮助!
答案 1 :(得分:1)
我找到了解决方案。 setter getter方法帮助我使变量r可以随处访问。现在我的按钮单击(textView)上的代码给出+1,如果应用程序处于离线状态,则每10秒给出一个r变量整数。
我找到了解决方案。 getter setter方法帮助我声明了我的r变量,并且我能够在每个函数中控制我的变量。解决方案,即使代码看起来很难看。
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;
private int r;
public int getDefaultR(){
return r;
}
public void setDefaultR(int r){
this.r=r;
}
@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){
r = 0+Integer.parseInt(name);
setDefaultR(0+Integer.parseInt(name)-10);
broj.setText("vrijednost je "+r);
final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
String s= String.valueOf(getDefaultR());
SharedPreferences.Editor editor = preferences2.edit();
editor.putString("vrijednost je ", s);
editor.apply();
}
else 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();
r = 0+Integer.parseInt(name)-10;
setDefaultR(0+Integer.parseInt(name)-10);
broj.setText("vrijednost je "+r);
final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
String s= String.valueOf(getDefaultR());
SharedPreferences.Editor editor = preferences2.edit();
editor.putString("vrijednost je ", s);
editor.apply();
}else{}
tekst1 = (TextView)findViewById(R.id.tekst1);
final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
tekst1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
r = r+1;
broj.setText("vrijednost je "+r);
String s= String.valueOf(getDefaultR());
SharedPreferences.Editor editor = preferences2.edit();
editor.putString("vrijednost je ", s);
editor.apply();
}
});
}
}