2012-03-23 3 views
3

현재 Android 게임을 개발 중입니다. 현재 ToggleButton : Music on 또는 Music off 중 하나의 옵션이있는 옵션 화면이 있습니다. 음악은 현재 재생중인 경우Android : 데이터베이스에 부울 값 저장 (초급)

나는 현재 위치에서이 부울, 그래서 클래스 검사를하고 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 데이터베이스에 저장합니다. 현재로서는 내가 할 수있는 유일한 방법은 ToggleButton이 선택되었는지 여부에 관계없이 값을 변경하는 TextView를 만드는 것입니다. 그러면 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); 
    } 
} 

}

+0

http://developer.android.com/guide/topics/data/data-storage.html –

답변

6

SQLite는 부울 유형을 처리하지 않습니다. 나는 항상 smallint를 사용하고 필드에 1이나 0을 넣는다. null을 허용하지 않도록 설정하고, 유스 케이스가 주어지면 기본값을 1 또는 0으로 설정하십시오.

여기 예입니다 :

CREATE TABLE "db"."boolean_example" ("boolean_example_field" smallint NOT NULL DEFAULT 0); 
+0

내가 SQLite는 데이터베이스에 부울을 저장하려면 1로 동의 0 또는 1로 변환해야합니다. – Houcine

+0

답장을 보내 주셔서 감사합니다.이 예를 들어 주시겠습니까? –

2

저장 환경 설정에 더 나은 아이디어가 아마 Shared Preferences를 사용합니다. 그리고 여기 예입니다 :

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

    ... 
    boolean isOn = settings.getBoolean("EnableMusic",true); 
+0

안녕하세요, 귀하의 의견에 감사드립니다. 이 예제를 편집하고 위에 게시 한 코드 중 일부를 사용할 수 있다고 생각하지 않습니까? 미안하지만 이걸 시도해 봤지만 아직도 확신 할 수 없다. 고맙습니다. –