2016-11-08 20 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

相關問題