UPDATE: Ich habe den gesamten MainService AND MainActivity hinzugefügt, falls irgendwo anders etwas nicht stimmt. Außerdem habe ich eine Lösung hinzugefügt, die unten angegeben wird, obwohl es die Textansicht weiterhin nicht aktualisiert.SharedPreferences funktioniert nicht, wenn versucht wird, TextView zu aktualisieren
Ich versuche, eine TextView zu ändern, und ich möchte, dass es permanent ist, also verwende ich SharedPreferences. Leider stimmt etwas nicht, da TextView nicht aktualisiert wird.
MainService:
public class MainService extends Service {
public static final String BROADCAST_ACTION = "com.example.vladpintea.friendsbeforecents.displayevent";
private final Handler handler = new Handler();
int counterr = 0;
Intent intentt;
String usedTimer;
long interval;
//TimerTask that will cause the run() runnable to happen.
TimerTask myTask = new TimerTask() {
public void run() {
stopSelf();
}
};
//Timer that will make the runnable run.
Timer myTimer = new Timer();
@Override
public void onCreate() {
intentt = new Intent(BROADCAST_ACTION);
registerReceiver(counter, new IntentFilter(Intent.ACTION_SCREEN_ON));
Toast.makeText(MainService.this, "Service, Created", Toast.LENGTH_SHORT).show();
}
private BroadcastReceiver counter = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainService.this, "Whoops! You've Lost.", Toast.LENGTH_SHORT).show();
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 30000);
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(MainService.this, "Service, Started", Toast.LENGTH_SHORT).show();
usedTimer = intent.getStringExtra("timer");
try {
interval = Long.parseLong(usedTimer);
} catch (NumberFormatException ignored) {}
myTimer.schedule(myTask, interval);
handler.removeCallbacks(sendUpdatesToUI);
handler.postDelayed(sendUpdatesToUI, 1000);
return super.onStartCommand(intent, flags, startId);
}
private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
handler.postDelayed(this, 1000);
}
};
public void DisplayLoggingInfoPlus() {
intentt.putExtra("counter", String.valueOf(++counterr));
sendBroadcast(intentt);
}
@Override
public void onDestroy() {
DisplayLoggingInfoPlus();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
wakeLock.acquire();
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 30000);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button startApp = (Button) findViewById(R.id.startApp);
final EditText timer = (EditText) findViewById(R.id.insertTimer);
assert startApp != null;
startApp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Countdown, Started", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, MainService.class);
assert timer != null;
intent.putExtra("timer", timer.getText().toString());
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000);
registerReceiver(broadcastReceiver, new IntentFilter(MainService.BROADCAST_ACTION));
startService(intent);
}
});
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateUI(intent);
}
};
private void updateUI(Intent intent) {
String counter = intent.getStringExtra("counter");
TextView txtCounter = (TextView) findViewById(R.id.txtCounter);
assert txtCounter != null;
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(counter,txtCounter.getText().toString());
editor.commit();
}
}
Mögliche Duplikat von [Wie SharedPreferences in Android verwenden zu speichern, abzurufen und zu bearbeiten Werte] (http://stackoverflow.com/questions/3624280/how-to-use-sharedpreferences-in-android-zu-speichern-fetch-and-edit-werte) – piotrek1543
der asnswer ist in link oben. Sie speichern den Wert, aber rufen Sie – piotrek1543