2016-11-08 44 views
1

我想从用户处取得字符串,稍后在应用程序关闭时使用它..现在它只在应用程序在后台时起作用,但当我关闭app..is有办法做到这一点,或者我必须使用SharedPreference,如果我不得不使用它,请解释如何,因为我尝试和失败..感谢很多。即使应用程序关闭,存储字符串

这是我在我的MainActivity代码从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; 
} 

应用程序崩溃的字符串,并给出

“尝试调用接口方法“java.lang.String中android.content .SharedPreferences.getString(java.lang.String,java.lang.String)'null object object“

at this line

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

这是类,其中i调用的方法

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

,你能否告诉全班(ES)借为[ mcve],而不仅仅是这些小代码样本? 'sharedPreferences'为空,因为它没有被初始化。 –

+0

我添加了我的整个MainActivity类..我只是张贴与我的问题相关的片段 –

+0

请不要添加整个事情,请阅读该链接。并非您添加的所有代码都与SharedPreferences有关。 –

回答

1

无论你叫getRem()的方法,你不能这样做的活动之外的SharedPreferences为空。

喜欢,我假设你做了一个new MainActivity(),然后叫getRem()就可以了?

你需要从一个可用Context再次获得SharedPreferences,然后你可以使用getString("TAG", "")

编辑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(); 

以检索它:

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 
SharedPreferences sharedPreferences = context.getSharedPreferences("MyPREFERENCES",Context.MODE_PR‌​IVATE); 
    rem = sharedPreferences.getString("TAG", ""); 
} 

更多SharedPreferences

+0

我试了一下,应用程序仍然崩溃..我添加了新的代码..我做错了什么? –

+0

public String getRem(){ reminder =“”; reminder = sharedPreferences.getString(“TAG”,“”); 返回提醒; } – Tefa

+0

如果它没有工作,请把这个活动的整个代码。 – Tefa