Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 未反映存储在共享首选项中的值_Android_Sharedpreferences - Fatal编程技术网

Android 未反映存储在共享首选项中的值

Android 未反映存储在共享首选项中的值,android,sharedpreferences,Android,Sharedpreferences,当我单击按钮时,textview的值必须更改为“这些是新值”,但这不会发生。有人能帮我找到我的错误吗?在您更改文本之前,文本视图正在设置文本。因此它不会反映在文本视图中。更改字符串的值后,将此行添加到onclick方法的最后一行 package com.example.shared; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPrefer

当我单击按钮时,textview的值必须更改为“这些是新值”,但这不会发生。有人能帮我找到我的错误吗?

在您更改文本之前,
文本视图正在设置文本。因此它不会反映在
文本视图中。更改字符串的值后,将此行添加到
onclick
方法的最后一行

package com.example.shared;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
Button bshared;
TextView tv;
String x;
SharedPreferences pref;
Editor edit;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bshared = (Button) findViewById(R.id.bshared);
    tv = (TextView) findViewById(R.id.tv);

    tv.setText(x);
    bshared.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
                  pref=getApplicationContext().getSharedPreferences("details",1);
            edit = pref.edit();
            edit.clear();
            edit.putString("name", "These are new values");
            edit.commit();
            x = pref.getString("name", "");

        }
    });

}
}
编辑:

tv.setText(x);

textview
在您更改文本之前设置文本。因此它不会反映在
文本视图中。更改字符串的值后,将此行添加到
onclick
方法的最后一行

package com.example.shared;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
Button bshared;
TextView tv;
String x;
SharedPreferences pref;
Editor edit;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bshared = (Button) findViewById(R.id.bshared);
    tv = (TextView) findViewById(R.id.tv);

    tv.setText(x);
    bshared.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
                  pref=getApplicationContext().getSharedPreferences("details",1);
            edit = pref.edit();
            edit.clear();
            edit.putString("name", "These are new values");
            edit.commit();
            x = pref.getString("name", "");

        }
    });

}
}
编辑:

tv.setText(x);

在单击方法中,必须将值设置为textview,如下代码所示

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bshared = (Button) findViewById(R.id.bshared);
    tv = (TextView) findViewById(R.id.tv);

    pref=getApplicationContext().getSharedPreferences("details",1);
    x = pref.getString("name", "");

    tv.setText(x);
    bshared.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            edit = pref.edit();
            edit.clear();
            edit.putString("name", "These are new values");
            edit.commit();
            x = pref.getString("name", "");
            tv.setText(x);


        }
    });

}
}

在单击方法中,必须将值设置为textview,如下代码所示

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bshared = (Button) findViewById(R.id.bshared);
    tv = (TextView) findViewById(R.id.tv);

    pref=getApplicationContext().getSharedPreferences("details",1);
    x = pref.getString("name", "");

    tv.setText(x);
    bshared.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            edit = pref.edit();
            edit.clear();
            edit.putString("name", "These are new values");
            edit.commit();
            x = pref.getString("name", "");
            tv.setText(x);


        }
    });

}
}


这里发生了什么,新值没有更新??是的,新值没有更新。如果我在onclick方法的末尾设置text,该值将被更新。但是,当我重新启动应用程序时,该值没有反映。SharedReferences在绑定正确后应该保存这些值?这里发生了什么,新值不会更新?是的,新值不会更新。如果我在onclick方法的末尾设置text,该值将被更新。但是,当我重新启动应用程序时,该值没有反映。SharedReferences在绑定正确后应该保存这些值?你说的很好。但是,当我重新启动应用程序时,该值并没有反映出来。SharedReferences在绑定后应该保存这些值,对吗?是的,因为您的textview从x获取值,而x在启动时的值为null。您仅在单击按钮时才将值设置为x。请参见我的编辑..这非常有效,但在最小化一次后,值不会立即反映出来,因为在创建时,字符串“name”没有值您确定已将tv.settext(x)添加到onclick的末尾??该死,我忘了添加它,谢谢你,我的问题已经解决了。你说的很好。但是,当我重新启动应用程序时,该值并没有反映出来。SharedReferences在绑定后应该保存这些值,对吗?是的,因为您的textview从x获取值,而x在启动时的值为null。您仅在单击按钮时才将值设置为x。请参见我的编辑..这非常有效,但在最小化一次后,值不会立即反映出来,因为在创建时,字符串“name”没有值您确定已将tv.settext(x)添加到onclick的末尾??该死,我忘了添加它,谢谢你,我的问题已经解决了。你说的很好。但是,当我重新启动应用程序时,该值并没有反映出来。Sharedpreferences在绑定正确后应保存这些值?为此,必须在onClick之前设置共享首选项值。看看我的代码。它设置了以前存储的共享首选项值。这非常有效,但在最小化一次后,该值不会在我单击它时立即反映出来,它会被更新,因为在创建时,字符串“name”没有值,您所说的很好。但是,当我重新启动应用程序时,该值并没有反映出来。Sharedpreferences在绑定正确后应保存这些值?为此,必须在onClick之前设置共享首选项值。看看我的代码。它设置了以前存储的共享首选项值。这非常有效,但在最小化一次后,该值不会在我单击它时立即反映出来,因为在创建时,字符串“name”没有值