Получите данные от get SharedPreferences в сервисах на android - PullRequest
0 голосов
/ 12 апреля 2019

Как получить данные из 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

1 Ответ

0 голосов
/ 12 апреля 2019

используйте этот код для класса 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 () : планирует запись данных асинхронно.Он не информирует вас об успешности операции.

...