Android: сохранение логических значений в базе данных (для начинающих) - PullRequest
3 голосов
/ 23 марта 2012

В настоящее время я занимаюсь разработкой игры для Android, и у меня есть экран опций, который на данный момент имеет одну опцию в виде кнопки ToggleButton: Музыка включена или Музыка выключена.

В данный момент у меня есть этот логический тип, поэтому класс проверяет, воспроизводится ли музыка в данный момент, и затем определяет, отмечена ли кнопка ToggleButton:

    private boolean isMyServiceRunning(String serviceCanonicalClassName) {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceCanonicalClassName.equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

Итак, теперь я хочу иметь возможность отправлять значения True или False в базу данных SQLite, которую я настроил. В данный момент времени единственный способ, которым я могу это сделать, - это создать TextView, который изменяет значение независимо от того, отмечена ли кнопка ToggleButton или нет. Затем значение в TextView успешно отправляется в базу данных, но это создает проблемы, такие как не сохранение текущих настроек, выбранных пользователем.

Спасибо всем, кто ответит, если вам потребуется больше кода, чтобы помочь вам ответить, я предоставлю его как можно скорее.

Я нашел некоторые ответы довольно запутанными, поэтому я думаю, что было бы лучше, если бы я просто скопировал весь свой код сюда, чтобы вы могли лучше понять:

public class OptionsActivity extends Activity {

private boolean isMyServiceRunning(String serviceCanonicalClassName) {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceCanonicalClassName.equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

Intent i; // Handles MyMusicService.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.options);


    final TextView tSound = (TextView) findViewById(R.id.textView2);
    final TextView tJoin = (TextView) findViewById(R.id.textView3);

    final Button saveBtn = (Button) findViewById(R.id.optSaveBtn);
    final Button tblBtn = (Button) findViewById(R.id.tableBtn);

    i=new Intent(this, MyMusicService.class);

    final ToggleButton soundOption = (ToggleButton) findViewById(R.id.soundPref);
    final ToggleButton joinOption = (ToggleButton) findViewById(R.id.joinPref);

    boolean musicPlays = isMyServiceRunning(MyMusicService.class.getCanonicalName());
    boolean joinChecking = joinOption.isChecked();

    soundOption.setChecked(musicPlays); 


    if(musicPlays==true){

        tSound.setText("On");
    }

    if(musicPlays==false) { 

        tSound.setText("Off");
    }

    if(joinChecking==true){

        tJoin.setText("Auto");
    }

    if(joinChecking==false){

        tJoin.setText("Manual");
    }

    soundOption.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {   

            // Perform action on clicks to control sound being on and off.   
            if(soundOption.isChecked()) {  

                Toast.makeText(OptionsActivity.this, "Music on.", Toast.LENGTH_SHORT).show(); 
                startService(i);

            } 

            else {  

                if(stopService(i)==true){
                    soundOption.setChecked(false);
                    stopService(i);
                    Toast.makeText(OptionsActivity.this, "Music off.", Toast.LENGTH_SHORT).show(); 

                }  
            }
        }});

    joinOption.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            if(joinOption.isChecked()){

                Toast.makeText(OptionsActivity.this, "Auto", Toast.LENGTH_SHORT).show();

            }

            else{

                Toast.makeText(OptionsActivity.this, "Manual", Toast.LENGTH_SHORT).show();

            }

        }
    });

    tblBtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            Intent shmoo = new Intent(OptionsActivity.this, SQLView.class);
            startActivity(shmoo);

        }
    });



    saveBtn.setOnClickListener(new View.OnClickListener(){

        public void onClick(View v) {




            switch (v.getId()){ 


            case R.id.optSaveBtn: //Determine what will happen when the user presses the "Submit button".
                boolean optionsWork = true;
                try{

                    String sound = tSound.getText().toString();
                    String join = tJoin.getText().toString();

                    optionsDB entry = new optionsDB(OptionsActivity.this); //Creating a new instance of MasterMind game
                    entry.open();
                    entry.createOptionEntry(join, sound); //Passing both strings
                    entry.close();

                }catch (Exception e){ //Creating an error message if for some reason the app cannot transfer data to the Database.

                    Toast.makeText(OptionsActivity.this, "Error", Toast.LENGTH_SHORT).show();
                }

                finally { //Creating an AlertDialog box when the user presses the Submit button.

                    if (optionsWork){

                        Toast.makeText(OptionsActivity.this, "Settings Saved", Toast.LENGTH_SHORT).show();

                    }

                }
                break;
            }
        }
    });
}



protected void onDestroy() {
    if (this.isFinishing()){
        super.onDestroy();
        stopService(i);
    }
}

}

Ответы [ 2 ]

6 голосов
/ 23 марта 2012

SQLite не обрабатывает логический тип. Я всегда просто использую smallint и в поле ставлю 1 или 0. Удостоверьтесь, что вы установили его, чтобы он не принимал нулевые значения, и установите значение по умолчанию равным 1 или 0, учитывая ваш вариант использования.

вот пример:

CREATE  TABLE "db"."boolean_example" ("boolean_example_field" smallint NOT NULL  DEFAULT 0);
2 голосов
/ 23 марта 2012

Для хранения предпочтений лучше использовать вероятно Shared Preferences .А вот пример:

    SharedPreferences settings = getSharedPreferences("GameSettings", 0);
    SharedPreferences.Editor editor = settings.edit();     
    editor.putBoolean("EnableMusic", mSilentMode);
    editor.commit();

    ...
    boolean isOn = settings.getBoolean("EnableMusic",true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...