0

나는 60 개의 체크 박스의 데이터를 저장해야하는 앱을 만들고있다. 사용자가 제출 단추를 누르면 데이터가 읽 t집니다. 앱을 다시 시작할 때 사용자 선택을 표시하고 싶습니다.공유 환경 설정을 사용하여 여러 확인란에 대한 데이터를 저장하는 방법은 무엇입니까?

공유 환경 설정을 사용하여이를 수행하려고하지만 실수를하고있는 위치를 알지 못합니다. 다음과 같이

Y 코드는 다음과 같습니다 당신이 지속적으로 온 클릭() 메서드에서 true로 같은 SharedPreference "checkboxValue"을 설정하는 것처럼

import java.util.ArrayList; 
import java.util.Calendar; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.Toast; 

public class Labs extends Activity implements OnClickListener { 

ArrayList <Calendar> Cal= new ArrayList <Calendar>(60); 

ArrayList <CheckBox> l= new ArrayList <CheckBox>(60); 

ArrayList <Boolean> checkboxValue = new ArrayList <Boolean>(60); 

private SharedPreferences mSharedPreferences; 
private SharedPreferences.Editor mPrefsEditor; 
private Button submitButton; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_labs); 
    addenable(); 


    submitButton = (Button)findViewById(R.id.button1); 
    submitButton.setOnClickListener(this); 
    mSharedPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE); 
    mPrefsEditor = mSharedPreferences.edit(); 


    //Initialise check boxes for every slot 
    for (int i = 101; i <= 160; i++) { 
      String viewId = "checkBox" + i; 
      l.add(i-101, (CheckBox) findViewById(getResources().getIdentifier(viewId, "id", getPackageName()))); 
      checkboxValue.add(i-101, mSharedPreferences.getBoolean("saveLogin", false)); 
     } 



    for(int j=0; j<60; j++) 
    { 
    if (checkboxValue.get(j) == true) { 
     l.get(j).setChecked(true);} 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void addenable(){ 

} 

public int Day(int a) 
{ 
    int d=0; 
    int x = a; 
    x--; 

    if(x>=30) 
     d = (x/6)-3; 

    else 
     d=(x/6)+2; 

    return d; 
} 

public int Hour(int a) 
{ 
    int hr=0; 
    int x=a; 

    x--; 

    hr=(x%6)+8; 

    if((x%6)>=4) 
     hr--; 

    if(x>=30) 
     hr = hr+6; 

    return hr; 

} 

public int Min(int a) 
{ 
    int m=0; 
    int x=a; 

    if(x%6==5) 
     m=50; 

    if(x%6==0) 
     m=40; 

    return m; 
} 

public void getdata(View V){ 

    for(int i=0; i<60; i++) 
    { 
     Cal.add(i, Calendar.getInstance()); 
     Cal.get(i).set(Calendar.DAY_OF_WEEK, Day(i+1)); 
     Cal.get(i).set(Calendar.HOUR_OF_DAY, Hour(i+1)); 
     Cal.get(i).set(Calendar.MINUTE, Min(i+1)); 
     Cal.get(i).set(Calendar.SECOND, 0); 
    } 


    //Intents 
    Intent setVibration = new Intent(); 
    setVibration.setClass(this, AlarmReciever.class); 

    Intent setNormal = new Intent(); 
    setNormal.setClass(this, RingerMode.class); 

    //PENDING INTENTS 
    ArrayList <PendingIntent> Lab_V= new ArrayList <PendingIntent>(60); 
    ArrayList <PendingIntent> Lab_N= new ArrayList <PendingIntent>(60); 

    for(int i=0; i<60; i++) 
    { 
     Lab_V.add(PendingIntent.getBroadcast(this, i, setVibration, 
       PendingIntent.FLAG_UPDATE_CURRENT)); 
     Lab_N.add(PendingIntent.getBroadcast(this, i, setNormal, 
       PendingIntent.FLAG_UPDATE_CURRENT)); 
    } 

    // create the object 
    AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    for(int i=0; i<60; i++) 
    { 
      if(l.get(i).isChecked()){ 

      mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Cal.get(i).getTimeInMillis(), 7*24*60*60*1000, Lab_V.get(i)); 
      mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Cal.get(i).getTimeInMillis()+50*60*1000, 7*24*60*60*1000, Lab_N.get(i)); 

      Toast.makeText(this, "L"+(i+1), Toast.LENGTH_SHORT).show(); 
      } 
    } 

    } 


public void onClick(View view) { 
    if (view == submitButton) { 


     for(int i=0; i<60; i++) 
     { 

     if (l.get(i).isChecked()) { 
      mPrefsEditor.putBoolean("checkboxValue" , true); 
      mPrefsEditor.commit(); 
     } else { 
      mPrefsEditor.clear(); 
      mPrefsEditor.commit(); 
     } 
     } 

     getdata(view); 
    } 
} 
} 
+1

현재 코드의 문제는 무엇입니까? 당신은 실제로 작동하지 않는 것에 대해 아무 말도하지 않았습니다. (충돌하고 그냥 저장하지 않는 것입니까?) –

+0

아니, 그냥 아무것도 저장하지 않습니다. – Ish

+0

진행 상황이 있습니까? 그렇다면 답을 올바른 것으로 표시하거나 후속 조치를 요청하십시오. – RScottCarson

답변

1

것 같습니다.

또한 논리가 onClick 메서드에 정확히 무엇인지 이해하지 못합니다. 그 중 하나라도 선택하지 않으면 전체 SharedPreferences 파일을 지우는 것처럼 보이기 때문입니다.

내가 권하고 싶습니다 :

  1. 고유의 공유 환경 설정에서 체크 박스의 각 명명.
  2. mPrefEditor.clear()를 제거하는 것은 한 줄이 아닌 전체 파일을 지우는 것입니다 (원하지 않는 한).

    public void onClick(View view) { 
        ... 
        for(int i = 0; i < 60 ; i++){ 
    
         if(l.get(i).isChecked()){ 
          mPrefEditor.putBoolean("checkBox_"+i, true); 
         } 
         else { 
          mPrefEditor.putBoolean("checkBox_"+i, false); 
         } 
        } 
        mPrefEditor.commit(); 
        ... 
    } 
    
+0

이것은 나에게도 문제가되는 것 같다. 나는 당신의 제안이 문제를 해결할 것이라고 생각합니다. –

관련 문제