変数rをグローバルにして、SharedPreferencesで変数r(String s)をグローバルレベルでロードできるようにします。setOnClickListenerメソッドで変数をアクセントする必要があります
私が作っているのは、人工ロボットHUNGER変数のようなものです。私はボタンをクリックして+1空腹を追加しますが、毎秒私はそれにタイムスタンプ付きの空腹を与えたいと思います。また、タイムスタンプは、デバイスがオフラインになっている時間を示すインジケータとして機能し、-xxの比例を与えます。
現在のところ、私はローカル変数がonClickListenerであるため、Rに+1を加えることしかできません。rがlocaly宣言されているため、(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ジョブスケジューラ(よりバッテリにやさしい)またはAlarm Managerを使用して、一定時間内にサービスを開始する - > sharedPreferences変数を取得および編集します。それがちょうどintの場合はあなたのrだから、好みとしてそれを保存するのは大丈夫です。 –
もしそれがグローバルに宣言されていれば、finalにする必要があります。私はいつも価値を変えるので、最終的にはできません。 –