2016-08-15 1 views
0

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(); 
} 

}

+0

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

+0

der asnswer ist in link oben. Sie speichern den Wert, aber rufen Sie – piotrek1543

Antwort

0

Leider etwas falsch ist, weil die Textview wird nicht aktualisiert.

Sie müssen die Textview durch den Aufruf setText aktualisieren():

String counter = intent.getStringExtra("counter"); 
TextView txtCounter = (TextView) findViewById(R.id.txtCounter); 
txtCounter.setText(counter); 
0

Ändern Sie die folgende Zeile

von

editor.putString(String.valueOf(txtCounter), counter); 

zu

editor.putString("counter",txtCounter.getText().toString()); 
+0

nicht ab. Bei txtCounter.getText() erhalte ich eine Fehlermeldung, die besagt, dass es sich um einen falschen Argumenttyp handelt. –

+0

hinzugefügt ein toString() – gaara87

+0

Noch kein Glück. Es gibt keine Fehler, es wird nur nicht aktualisiert. –

0

Zum Speichern von Werten in gemeinsamen Vorlieben:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString("Counter",String.valueOf(txtCounter)); 
editor.apply(); 

Um Werte aus dem gemeinsamen Vorliebe abrufen:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
String Counter= preferences.getString("Counter", ""); 
if(!Counter.equalsIgnoreCase("")) 
{ 
    Counter= Counter+ " Counter"; /* Edit the value here*/ 
} 
Verwandte Themen