当前位置: 首页 > 知识库问答 >
问题:

从SharePreference检索数据

澹台镜
2023-03-14

我正在使用SharePreduce进行用户界面设置。

当我想获取我的key_son布尔值时,无论它是真是假,都可以播放声音。

但是,当我点击button3时,即使我将key_son的值更改为false,我总是播放歌曲,你能帮我弄清楚它出了什么问题吗?

正常情况下,我的< code>boolean playSound应该为true或false,

当我单击按钮时,如果playSound为true,则我播放歌曲,否则我不播放它,但似乎布尔playSound永远不会更改此值,它保持为true

public class MainActivity extends AppCompatActivity {

    Button button;
    Button button2;
    Button button3;
    TextView textView;
    MediaPlayer mediaPlayer;

    private boolean playSound;

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

        button = (Button) findViewById(R.id.button);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);
        textView = (TextView) findViewById(R.id.textView);

        mediaPlayer = new MediaPlayer();
        mediaPlayer  = MediaPlayer.create(getApplicationContext(), R.raw.sonvoix);

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        playSound = sharedPreferences.getBoolean("key_son", true);

        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(playSound){
                    mediaPlayer.start();
                }else{
                    mediaPlayer.stop();
                }
            }
        });

    }

}

共有3个答案

巫马昆琦
2023-03-14

这是我的主要活动,我成功地得到了布尔值。实际上我有两个布尔值要得到。一个是歌曲的布尔值,一个是振动器的布尔值。

现在的问题是,我得到了两个布尔值,但当我将一个值更改为true或false时,它会自动影响第二个值。

例如:playsound=true和isVibrating=true然后我点击按钮3和按钮4,一切正常,歌曲播放和振动正常

但当我将playsound或IsVibration更改为false时,所有这些都发生了变化,因此当我再次单击按钮3和按钮4时,歌曲没有播放,但振动也不起作用,我认为一个变化会影响所有我不知道为什么

public class MainActivity extends AppCompatActivity {


Button button3;
Button button4;
Vibrator vibrator;

private boolean playSound;
private boolean isVibrating;

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

    vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

    button3 = (Button) findViewById(R.id.button3);
    button4 = (Button) findViewById(R.id.button4);


    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(!SettingsActivity.playSound){
                AudioPlay.playAudio(MainActivity.this, R.raw.sonvoix);
            }
        }
    });

    button4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(!SettingsActivity.isVibrating){
             vibrator.vibrate(400);
            }

        }
    });


}

}

    <SwitchPreference
        android:defaultValue="true"
        android:key="key_son"
        android:summary="Activer ou désactiver le son de touche"
        android:title="Son" />

    <SwitchPreference
        android:defaultValue="false"
        android:key="key_vibreur"
        android:summary="Activer ou désactiver le vibreur"
        android:title="Vibreur" />

公共类设置Activity扩展首选项Activity {

public static boolean playSound;
public static boolean isVibrating;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, new MainSettingsFrament()).commit();

    SharedPreferences sharedPreferencesPlaySound = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    playSound = sharedPreferencesPlaySound.getBoolean("key_musique", false);

    SharedPreferences sharedPreferencesVibrating = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    isVibrating = sharedPreferencesVibrating.getBoolean("key_vibreur", true);

}
司寇正志
2023-03-14

要从<code>SharedReferences</code>中获取存储值,首先必须在那里存储一些东西。为此,您必须使用SharedReferences.Editor

比如:

SharedPreferences sp= getSharedPreferences("prefs", Context.MODE_PRIVETE);
SharedPreferences.Editor editor = sp.edit();
//1st parameter is key and 2nd is value to store
editor.putBoolean("key_son", true); 
editor.commit();

要从共享首选项中读取,请使用:

//Declare SharedPreferences only if you didn't before
SharedPreferences sp= getSharedPreferences("prefs", Context.MODE_PRIVETE);
boolean playSound = sp.getBoolean("key_son", true);

现在,您的< code>playSound已经可以使用了。

公西英叡
2023-03-14

从首选项获取实例

sharedPreferences = getContext().getSharedPreferences(preferences, 
Activity.MODE_PRIVATE);

保存到首选项

sharedPreferences.edit().putBoolean(key, value).apply();

从首选项获取

sharedPreferences.getBoolean(key, defaultValue);
 类似资料:
  • 问题内容: 我正在法国学习,所以很难找到法语教程来解决我的问题。因此,我不得不问我的问题,希望有一个令人满意的解决方案。 我的问题是我在firebase上读取数据时遇到了麻烦,并且花了三天时间。 我有这样的结构: 我已经开始编写一些代码,可以恢复密钥,但是无法恢复这些值“ nom”,“ argent”等。 问题答案: John的替代方法是使用来获取每个属性:

  • 我正试图建立一个应用程序,用户将能够连接到我的应用程序,在twitter上输入关键字进行搜索,然后结果将被存储在数据库中。从用户输入关键词的那一刻起,我就想跟踪twitter上的内容。这些结果将被进一步分析,一些统计数据将呈现给用户。到目前为止,我已经使用tweppy和twitter流api来获取推文。但是我意识到我不能有一个以上的开放流连接(用于并行搜索多个关键字)。< br >我搜索了stac

  • 问题内容: 给定如下所示的URL,如何解析查询参数的值?例如,在这种情况下,我需要的值。 我在我的环境中使用Django;有没有一种方法可以帮助我? 我尝试使用,但它没有返回ghi我希望的值。 问题答案: Python 2: Python 3: 返回值列表,因此上述代码将打印。

  • 问题内容: 我正在wxPython中编写一个小应用程序,它具有一个matplotlib图形(使用wxagg后端)面板。我想为用户添加将图中当前绘制的X,Y数据导出到文本文件的功能。有无创方法可以做到这一点吗?我已经搜索了很多,似乎什么也找不到,尽管我觉得它非常简单而且就在我的面前。 我绝对可以获取数据,并在绘制数据时将其存储在某个位置,并使用它-但这会侵入我的代码的较低级别。如果我可以做些简单的事

  • 关于我的上一个问题,我想从创建的sqlite数据库中检索ID,将其作为Intent putExtra()中的数据传递,以便将其用作PendingContent的ID。getActivity()。目前,我正在使用queryNumEntries为从我的DatabaseManager中的以下代码添加到数据库中的每个提醒设置id。类别: 并在AddActivity中调用它。班 在创建条目时,除了尝试此操作

  • 我想从数据库中检索整个表并将其显示到我的jsp页面中,但我得到了一个错误 我的工作人员豆。java是 而我的getAllDetailDAO.java是 连接提供程序包com.staff.db; 而我的DisplayAllDetail.jsp是 我的错误是 StackTrace:org.apache.jasper.servlet.jspServletwrapper.handleJSPExceptio