2016-11-08 2 views
1

Я пытаюсь взять строку от пользователя и использовать ее позже, когда приложение закрыто. Теперь оно работает, когда приложение находится в фоновом режиме, но я теряю строку, когда я закрываю приложение .. есть способ сделать это, как это, или я должен использовать SharedPreference, и если я должен использовать его, пожалуйста, объясните, как, потому что я пытался и не смог.Сохранение строки, даже если приложение закрыто

это мой код в моем MainActivity к строке из

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

аварий приложение EditText и дает

«Попытка вызова метода интерфейса«java.lang.String android.content .SharedPreferences.getString (java.lang.String, java.lang.String)»на нулевой ссылки на объект»

на этой линии

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

это класс, где я вызываю метод

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

Можете ли вы показать весь класс (ы) в виде [ mcve], а не только эти маленькие образцы кода? 'sharedPreferences' имеет значение null, поскольку оно не инициализировано каким-то образом. –

+0

Я добавил весь мой класс MainActivity..i просто разместил фрагменты, связанные с моим вопросом. –

+0

Не добавляйте все это, прочитайте эту ссылку, пожалуйста. Не все добавленные вами коды связаны с SharedPreferences. –

ответ

1

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", ""); 
} 

Где бы вы назвали метод getRem(), вы не можете сделать это за пределами деятельности как SharedPreferences равны нулю.

Как я полагаю, вы сделали new MainActivity(), а затем позвонили по телефону getRem(), возможно?

Вы должны получить SharedPreferences снова из доступного Context, а затем вы можете использовать getString("TAG", "")

EDIT заимствованной из 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

да, это именно то, что я сделал: D –

+0

Рад слышать. Вы можете выразить свою благодарность, [принимая любой ответ] (http://stackoverflow.com/help/someone-answers) –

+0

большое спасибо за вашу помощь и ваше время ... это правильно! –

1

Вы можете использовать

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

к retrive его:

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

[обновление] больше о SharedPreferences

+0

Я попробовал, и приложение все еще падает. Я добавил новый код .. что я делаю неправильно? –

+0

public String getRem() { reminder = ""; reminder = sharedPreferences.getString ("TAG", ""); возвращение напоминание; } – Tefa

+0

если это не работает, пожалуйста, введите весь код для этой деятельности. – Tefa

 Смежные вопросы

  • Нет связанных вопросов^_^