从android服务中的Get SharedReferences获取数据
启动服务类后,如何从SharedReferences获取数据? 在这段代码中,我有很多令人困惑的问题。有时在MyService.class中,如果在onCreate()中首先运行,则有时不运行。在我的代码中,有时返回null中的displayName()有时返回a,但我无法在MyService.class中执行saveName(“b”)。我怎样才能正确地做到这一点?我需要从最初在MainActivity类中创建的SharedReferences中读取数据 MyService.class是:从android服务中的Get SharedReferences获取数据,android,service,sharedpreferences,Android,Service,Sharedpreferences,启动服务类后,如何从SharedReferences获取数据? 在这段代码中,我有很多令人困惑的问题。有时在MyService.class中,如果在onCreate()中首先运行,则有时不运行。在我的代码中,有时返回null中的displayName()有时返回a,但我无法在MyService.class中执行saveName(“b”)。我怎样才能正确地做到这一点?我需要从最初在MainActivity类中创建的SharedReferences中读取数据 MyService.class是: pu
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
将此代码用于Myservice类:
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().equals("a") )
{
Toast.makeText(this, " ٬٬٬٬٬٬٬٬٬" + displayName() , Toast.LENGTH_SHORT ).show();
saveName("b");
}else if ( displayName().equals("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() {
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.commit();
}//saveName
}
displayName()==“a”-->displayName().equals(“a”)
及
editor.apply()-->editor.commit()
commit():同步写入数据(阻止从其调用的线程)。然后它会通知您操作的成功
apply():计划异步写入数据。它没有告诉你手术的成功