2016-11-08 7 views
1

Ich versuche String vom Benutzer zu nehmen und es später zu verwenden, wenn die App geschlossen ist .. Jetzt funktioniert es nur, wenn die App im Hintergrund ist, aber ich verliere die Zeichenfolge, wenn ich die schließen app..is gibt es eine Möglichkeit, es so zu tun, oder ich SharedPreference verwenden muss und wenn ich es verwenden muss bitte erklären, wie, weil ich versuchte und fehlgeschlagen..thanks viel.Speichern von Zeichenfolge, auch wenn die App geschlossen ist

dies ist mein Code in meinem MainActivity auf den String aus den EditText

public class MainActivity extends AppCompatActivity { 
private SharedPreferences sharedPreferences; 
private static String reminder; 
private EditText et; 
private Intent intent; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    // initialize variables 


    sharedPreferences = getSharedPreferences("MyPREFERENCES",Context.MODE_PRIVATE); 
    final SharedPreferences.Editor editor = sharedPreferences.edit(); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      et = (EditText) findViewById(R.id.Name); 
      reminder = et.getText().toString(); 
      if(reminder == null){ 
       reminder = "TWEAK!"; 
      } 

      editor.putString("TAG",reminder); 
      editor.commit(); 
      // do stuff 
} 

// get the user's string 
public String getRem() { 
    reminder = sharedPreferences.getString("TAG", ""); 
    return reminder; 
} 

die App stürzt ab und gibt

„Versuch Schnittstelle Methode aufzurufen‚java.lang.String android.content .SharedPreferences.getString (java.lang.String, java.lang.String)‘auf einer null-Objekt-Referenz“

an dieser Linie

reminder = sharedPreferences.getString("TAG", ""); 

das ist die Klasse, in der ich die Methode

public class Notifications extends BroadcastReceiver { 
private String rem; 

     // set notification 
@Override 
public void onReceive(Context context, Intent intent) { 
    // object to access MainActivity methods 
    MainActivity main = new MainActivity(); 
    rem = main.getRem(); 
} 
+0

Können Sie die ganze Klasse zeigen Borrowed verwenden (n) in der Nähe [ mcve], nicht nur diese kleinen Code-Beispiele? 'sharedPreferences' ist null, weil es irgendwie nicht initialisiert wird. –

+0

Ich habe meine ganze MainActivity-Klasse hinzugefügt ... ich habe gerade Snippets gepostet, die sich auf meine Frage beziehen –

+0

Fügen Sie nicht die ganze Sache hinzu, lesen Sie bitte diesen Link. Nicht der gesamte von Ihnen hinzugefügte Code ist mit den SharedPreferences verknüpft. –

Antwort

1

Überall dort, wo Sie die Methode der getRem() genannt, können Sie das nicht tun, außerhalb der Aktivität als die SharedPreferences null sind.

Wie, ich nehme an, Sie haben eine new MainActivity() gemacht, dann getRem() darauf, vielleicht?

Sie müssen die SharedPreferences wieder von einem verfügbaren Context zu erhalten, und dann können Sie getString("TAG", "")

EDIT von Shared preferences inside broadcastreceiver

public class Notifications extends BroadcastReceiver { 

    private String rem; 

    // set notification 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     setRem(context); 
    } 

    private void setRem(Context context) { 
     SharedPreferences prefs = context.getSharedPreferences("MyPREFERENCES",Context.MODE_PRIVATE); 
     rem = prefs.getString("TAG", ""); 
    } 

} 
+0

ja, das ist genau das, was ich tat: D –

+0

Froh, zu hören. Du kannst deinen Dank ausdrücken, indem du [jede Antwort akzeptierst] (http://stackoverflow.com/help/someone-answers) –

+0

vielen Dank für deine Hilfe und deine Zeit..das macht es richtig :) –

1

Sie können

SharedPreferences sharedpreferences = getSharedPreferences("MyPREFERENCES",Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedpreferences.edit(); 
editor.putString("TAG",reminder); 
editor.commit(); 

retrive es verwenden, rufen:

sharedpreferences.getString("TAG",""); 

[update]

public class Notifications extends BroadcastReceiver { 
private String rem; 
// set notification 
@Override 
public void onReceive(Context context, Intent intent) { 
// object to access MainActivity methods 
SharedPreferences sharedPreferences = context.getSharedPreferences("MyPREFERENCES",Context.MODE_PR‌​IVATE); 
    rem = sharedPreferences.getString("TAG", ""); 
} 

mehr über SharedPreferences

+0

Ich habe es versucht und die App stürzt immer noch..ich fügte den neuen Code hinzu ... was mache ich falsch? –

+0

public String getRem() { reminder = ""; Erinnerung = sharedPreferences.getString ("TAG", ""); Rückkehr Erinnerung; } – Tefa

+0

Wenn es nicht funktioniert, geben Sie bitte den gesamten Code für diese Aktivität ein. – Tefa

Verwandte Themen