Как получить данные из SharedPreferences после запуска класса обслуживания?
в этом коде у меня много запутанной проблемы Иногда в MyService.class сначала, если в onCreate () запустить иногда не делают. В моем коде иногда displayName () возвращает null, иногда возвращает a Но я не могу сохранить saveName ("b") в MyService.class. Как я могу сделать это правильно? Мне нужно прочитать данные из SharedPreferences, которые сначала создаются в классе MainActivity.
MyService.class is:
public class MyService extends Service {
private String SHARED_PREF_NAME = "username";
private String KEY_NAME = "key_username";
@Nullable
@Override
public IBinder onBind(Intent intent) {
Toast.makeText(this, " onBind ... " , Toast.LENGTH_SHORT ).show();
return null;
}
@Override
public void onCreate() {
if( displayName() == "a" )
{
Toast.makeText(this, " ٬٬٬٬٬٬٬٬٬" + displayName() , Toast.LENGTH_SHORT ).show();
saveName("b");
}else if ( displayName() == "b" )
{
Toast.makeText(this, " ٬٬٬٬٬٬٬٬٬ " + displayName() , Toast.LENGTH_SHORT ).show();
}else
{
Toast.makeText(this, " ٬٬٬٬٬٬٬٬٬ nothing :" + displayName() , Toast.LENGTH_SHORT ).show();
}
// super.onCreate();
}
@Override
public int onStartCommand(Intent intent , int flags , int startId) {
// Toast.makeText(this, " onStartCommand ... " , Toast.LENGTH_SHORT ).show();
return START_STICKY;
}
@Override
public void onDestroy() {
Toast.makeText(this, " onDestroy ... " , Toast.LENGTH_SHORT ).show();
super.onDestroy();
}//onDestroy
public String displayName() {
//myapp.bmodel.getApplicationContext().
SharedPreferences sp = getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);
String name = sp.getString(KEY_NAME, null);
return name;
}//displayName
public void saveName(String name) {
SharedPreferences sp = getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(KEY_NAME, name);
editor.apply();
}//saveName
}
и MainActivity.class:
public class MainActivity extends AppCompatActivity {
Button button;
TextView textView;
EditText editText;
private String SHARED_PREF_NAME = "username";
private String KEY_NAME = "key_username";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
editText = (EditText) findViewById(R.id.editText);
button = (Button) findViewById(R.id.button);
displayName();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveName();
}
});
}
public void startService(View view){
Intent intent= new Intent(this, MyService.class);
startService(intent);
}
public void stopService(View view){
Intent intent= new Intent(this, MyService.class);
stopService(intent);
}
private void displayName() {
SharedPreferences sp = getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);
String name = sp.getString(KEY_NAME, null);
if (name != null) {
textView.setText("Welcome " + name);
}
}
private void saveName() {
String name = editText.getText().toString();
if (name.isEmpty()) {
editText.setError("Oops! No Name");
editText.requestFocus();
return;
}
SharedPreferences sp = getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(KEY_NAME, name);
editor.apply();
// Optional, to display the name after shared prefs saved.
displayName();
}
}//class