Android 使用SharedReferences保存字符串

Android 使用SharedReferences保存字符串,android,android-fragments,android-listview,save,sharedpreferences,Android,Android Fragments,Android Listview,Save,Sharedpreferences,我试图制作一个列表视图,通过点击包含收藏夹的按钮来制作。此listview项由1个图像、标题和副标题创建 我的问题是:保存值时​​对于将要添加的项目数,它始终将值设为1,即使每次单击按钮(处于添加状态)时,该变量都会递增并存储在SharedReferences中 粘贴代码的重要部分: 列表1(活动视图的片段) (“i”是最喜欢的项目的值,“opcionselectionadai”是每个项目的字符串名称标题) Viewp(活动) 公共类Viewp扩展了FragmentActivity实现 Acti

我试图制作一个列表视图,通过点击包含收藏夹的按钮来制作。此listview项由1个图像、标题和副标题创建

我的问题是:保存值时​​对于将要添加的项目数,它始终将值设为1,即使每次单击按钮(处于添加状态)时,该变量都会递增并存储在SharedReferences中

粘贴代码的重要部分:

列表1(活动视图的片段)

(“i”是最喜欢的项目的值,“opcionselectionadai”是每个项目的字符串名称标题)

Viewp(活动)

公共类Viewp扩展了FragmentActivity实现 ActionBar.TabListener{

private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles   
private Context context = this;
String[] channel = new String[100];
int i; 


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewpager);
    // Initilization

    /*context.getSharedPreferences("guardar", 0);
    SharedPreferences shared = getSharedPreferences("guardar", 0);
    i = shared.getInt("Status_size", 0);  
    for(int s=1;s<=i;s++) {
        channel[s] = (shared.getString("opcionSeleccionada"+s, ""));
    }*/

    viewPager = (ViewPager) findViewById(R.id.pager);
    actionBar = getActionBar();
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

    viewPager.setAdapter(mAdapter);
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        




    // Adding Tabs
    actionBar.addTab(actionBar.newTab().setText(getResources().getString(R.string.emisoras))
            .setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText(getResources().getString(R.string.estilo))
            .setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText(getResources().getString(R.string.favoritos))
            .setTabListener(this));



    /*      for (int w=0; w<tabs.length-1; w++) {
        actionBar.addTab(actionBar.newTab().setText(tabs[w])
                .setTabListener(this));
    }*/
    /**
     * on swiping the viewpager make respective tab selected
     * */
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // on changing the page
            // make respected tab selected
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // on tab selected
    // show respected fragment view
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onResume(){
    super.onResume();

    context.getSharedPreferences("guardar", 0);
    SharedPreferences shared = getSharedPreferences("guardar", 0);

    i = shared.getInt("Status_size", 0);  //i siempre da 1
    for(int j=0; j<i; j++) {
        channel[j] = shared.getString("opcionSeleccionada"+j, "");
    }

}
private-ViewPager-ViewPager;
私人TabsPagerAdapter mAdapter;
私人ActionBar ActionBar;
//标签标题
私有上下文=这个;
字符串[]通道=新字符串[100];
int i;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager);
//初始化
/*getSharedReferences(“guardar”,0);
SharedReferences shared=getSharedReferences(“guardar”,0);
i=shared.getInt(“状态大小”,0);

对于(ints=1;s首先,我将假设通道[]实际上是
私有字符串通道[]
您应该发布所有相关代码,包括所有数组的所有初始化声明,因为此时我不知道通道数组的大小

    i = shared.getInt("Status_size", 0);  //i siempre da 1

    channel[i] = (shared.getString("opcionSeleccionada"+i, ""));
在上面的代码中,您声明正在加载上一个活动中的所有值。但此代码仅加载1个值。它加载键
处的字符串“opcionselectionada”+i
进入通道数组的位置
i
。因此,如果这是您填充通道数组的唯一位置,则其中只有1个值

要解决这个问题,您需要一个像片段中那样的循环,用共享首选项映射中的正确值填充数组

for(int j=0; j < i; j++) {
    channel[j] = shared.getString("opcionSeleccionada"+j, "");
}
您可以将
i
作为成员变量删除,并确保在deleteFavs方法中以相同的方式进行设置


我希望这有帮助。愉快地编码试试这将有助于PreferenceManager.GetDefaultSharedReferences(context.edit().putString(“MYLABEL”,“myStringToSave”).commit();

谢谢回答。不,通道不是私有变量(因为在这之后我需要在列表3中使用它,如果我使用通道私有,我在列表3中看不到这个值).关于“for”,我证明了这一点,但它仍然不起作用(我也相信您不需要“for”,因为我将此代码放在onRestart(方法)中,并且每次都会更新)好的,所以频道是公共的。关键是它在您的ViewP活动中是一个字符串数组。您没有显示完整的文件,所以有点难以理解。重新启动时,您仍然只填充数组的一个值。请尝试使用
onRestart()
而不是
onResume()
。您正在1个活动中向共享首选项添加值,当您重新启动主活动时,您从共享首选项中仅获得1个值。因此,您的字符串数组通道将只有1个值,并且由于您在片段中复制了该数组,因此它也有1个值。如果您发布所有代码,我将运行它并显示给您。它仍然不起作用。我正在编辑我的帖子以显示我的所有文件。现在已上载。可能是活动收音机的变量“I”造成了问题…(这是我的直觉告诉我的)从我所能收集到的信息来看,您的假设似乎是正确的。在您的每个无线电活动实例上,变量i都将重置为0。我假设您的每个无线电活动实例都是不同的频道或其他内容,并且您单击的按钮是一个收藏频道的收藏按钮。您可以在addFavs内部执行操作从共享首选项将i初始化为Status\u size的值。然后将其递增并添加您的收藏夹。下班后我会再看一看,但请尝试一下。
public class List3 extends Fragment {
    public String seleccion;    
    private Context context;
    private Activity act;
    private String[] myValue;
    private int y=0;
    private boolean primeravez=true;
    //private TextView estilo;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_principal3, container, false);


    context = getActivity().getApplicationContext();

    act = this.getActivity();
    Directivo directivo;
    ArrayList<Directivo> arraydir2 = new ArrayList<Directivo>();
    AdapterDirectivos2 adapter2 = new AdapterDirectivos2(act, arraydir2);
    Viewp viewp = (Viewp)getActivity();



    myValue = new String[viewp.channel.length];
    for (int k=0; k<myValue.length; k++) {
        myValue[k]=viewp.channel[k];
    }

    for(int i=0; i<myValue.length;i++) {
        if(myValue[i]!=null) {
            if (myValue[i].equals("Esencia Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.esenciaradio), "Esencia Radio", "Radio General");
            else if (myValue[i].equals("I love FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.ilovefm), "I Love FM", "Radio General");
            else if (myValue[i].equals("Los 40 Principales")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.los40principales), "Los 40 Principales", "Radio General");
            else if (myValue[i].equals("RAC 105")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.rac105), "RAC 105", "Radio General");
            else if (myValue[i].equals("Sky FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.skyfm), "Sky FM", "Radio General");
            else if (myValue[i].equals("Styl FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.stylfm), "Styl FM", "Radio General");
            else if (myValue[i].equals("Cocktelera Blues")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.cocktelerablues), "Cocktelera Blues", "General Blues");
            else if (myValue[i].equals("Q fm")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.qfm), "Q fm", "Jazz/Soul/Blues/Funky");
            else if (myValue[i].equals("Radio Clásica RNE")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.radioclasicarne), "Radio Clásica RNE", "Música Clásica");
            else if (myValue[i].equals("Koffee FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.koffeeradio), "Koffee FM", "Chill out");
            else if (myValue[i].equals("Ibiza Global Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.ibizaglobalradio), "Ibiza Global Radio", "House/Dance/Electrónica");
            else if (myValue[i].equals("Maxima FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.maximafm), "Maxima FM", "Dance/Música Electrónica");
            else if (myValue[i].equals("Cadena Latino")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.cadenalatino), "Cadena Latino", "Latino/Flamenco");
            else if (myValue[i].equals("Chanquete FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.chanquetefm), "Chanquete FM", "Flamenco");
            else if (myValue[i].equals("Flamenco Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.flamencoradio), "Flamenco Radio", "Flamenco");
            else if (myValue[i].equals("HotMix Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.hotmixradiofunky), "HotMix Radio Funky", "Funky Mix");
            else if (myValue[i].equals("Sublime FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.sublimefm), "Sublime FM", "Jazz/Soul/Funk/Lounge");
            else if (myValue[i].equals("Mix Radio House")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.mixradiohouse), "Mix Radio House", "House");
            else if (myValue[i].equals("Jazz Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.jazzradio), "Jazz Radio", "Jazz");
            else if (myValue[i].equals("SmoothJazz Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.smoothjazz), "SmoothJazz Radio", "Smooth Jazz");
            else if (myValue[i].equals("Canal Fiesta")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.canalfiesta), "Canal Fiesta", "Pop");
            else if (myValue[i].equals("Sky FM ")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.skyfmreggae), "Sky FM ", "Reggae");
            else if (myValue[i].equals("Arrow Classic Rock")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.arrowclassicrock), "Arrow Classic Rock", "Rock");
            else if (myValue[i].equals("HotMix Radio Rock")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.hotmixradiorock), "HotMix Radio Rock", "Rock");
            else if (myValue[i].equals("Rock FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.rockfm), "Rock FM", "Rock");
            else if (myValue[i].equals("Rock FM Classic")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.rockfmbelgie), "Rock FM Classic", "Classic Rock");
            else if (myValue[i].equals("Virgin Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.virginradio), "Virgin Radio", "Rock/Hard-Rock");
            else if (myValue[i].equals("Trance FM")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.trancefm), "Trance FM", "Trance");
            else if (myValue[i].equals("M80 Radio")) 
                adapter2.addItem(getResources().getDrawable(R.drawable.m80radio), "M80 Radio", "Best of 70s/80s/90s");
        }
    }
    i = shared.getInt("Status_size", 0);  //i siempre da 1

    channel[i] = (shared.getString("opcionSeleccionada"+i, ""));
for(int j=0; j < i; j++) {
    channel[j] = shared.getString("opcionSeleccionada"+j, "");
}
private void addfavs() {
    SharedPreferences shared = getSharedPreferences("guardar", 0);
    int i = shared.getInt("Status_size", 0);
    i++;
    //Toast toast = Toast.makeText(getApplicationContext(), "Bien, metido", Toast.LENGTH_SHORT);
    //toast.show();

    Bundle bundle=getIntent().getExtras();
    String str = bundle.getString("opcionSeleccionada"); // str = Nombre Radio
    //String str2= wmbPreference.getString("opcionSeleccionada",str);
    SharedPreferences.Editor editor = shared.edit();        
    editor.putString("opcionSeleccionada"+i, str);
    //you do not need to remove a value from shared preferences. If you use the same key then it gets overridden 
    //editor.remove("Status_size");
    editor.putInt("Status_size", i);
    editor.commit();// commit is important here.
 }