【问题标题】:How to add SharedPreferences如何添加 SharedPreferences
【发布时间】:2020-06-10 11:41:45
【问题描述】:

我是编程初学者!现在,我正在使用 Android Studio 中的 android 应用程序。我试图制作三个按钮,它们有助于通过 webview 链接三个 HTML 页面。但是,有一个问题是我无法添加共享首选项来保存单击的按钮。如果我重新进入应用程序,则不会保存更改。 这是我的主要活动:

package com.example.myapp;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatRadioButton;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    WebView view;
    AppCompatRadioButton rbLeft, rbRight, rbCenter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {



        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rbLeft = findViewById(R.id.rbLeft);
        rbRight = findViewById(R.id.rbRight);
        rbCenter = findViewById(R.id.rbCenter);
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
        view = (WebView) this.findViewById(R.id.webView);
        view.getSettings().setJavaScriptEnabled(true);
        view.getSettings().setLoadsImagesAutomatically(true);
        view.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        view.loadUrl("file:///android_asset/index1.html");

    }

    private class MyBrowser extends WebViewClient implements com.example.myapp.MyBrowser {
        @Override
        public boolean shouldOverrideurlLoading(WebView view, String url){
            view.loadUrl(url);
            return true;
        }
    }

    public void onRadioButtonClicked(View views){
        boolean isSelected = ((AppCompatRadioButton)views).isChecked();
        switch (views.getId()){
            case R.id.rbLeft:
                if (isSelected){
                    rbLeft.setTextColor(Color.WHITE);
                    rbRight.setTextColor(Color.RED);
                    rbCenter.setTextColor(Color.RED);
                    view.loadUrl("file:///android_asset/index1.html");
                }
                break;
            case R.id.rbCenter:
                if (isSelected){
                    rbLeft.setTextColor(Color.RED);
                    rbRight.setTextColor(Color.RED);
                    rbCenter.setTextColor(Color.WHITE);
                    view.loadUrl("file:///android_asset/info.html");

                }
                break;
            case R.id.rbRight:
                if (isSelected){
                    rbLeft.setTextColor(Color.RED);
                    rbRight.setTextColor(Color.WHITE);
                    rbCenter.setTextColor(Color.RED);
                    view.loadUrl("file:///android_asset/qollanma.html");


                }
                break;

        }

    }

    boolean doubleBackToExitPressedOnce;

    @Override
    public void onBackPressed() {

        if (doubleBackToExitPressedOnce) {
            new AlertDialog.Builder(this)
                    .setTitle("Halal Check")
                    .setMessage("Dasturdan chiqmoqchimisiz?")
                    .setPositiveButton("Ha",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                                    int which) {
                                    finish();
                                }

                            }).setNegativeButton("Yo'q", null).show();
            return;
        } else {
            if (view.canGoBack()) {
                view.goBack();
            } else {
            }
        }

        this.doubleBackToExitPressedOnce = true;
        if (getApplicationContext() == null) {
            return;
        } else {
            Toast.makeText(this, "Iltimos, Dasturdan chiqish uchun yana bir marta bosing!",
                    Toast.LENGTH_SHORT).show();
        }
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 2000);
    }
}


请,如果有人知道这件事,请帮助我! 如果可能的话,请展示它在我的代码中的表现。 感谢您的关注!

【问题讨论】:

  • 这个问题 (stackoverflow.com/questions/3624280/…) 能回答您的问题吗?
  • 您好 upgye1wi,首先,感谢您的评论。但如果可能的话,请在我的代码中展示它。
  • 一目了然,我在您的代码中看不到任何与 SharedPreferences 相关的内容。那么,你真的尝试过吗?
  • 尝试添加更多关于您已经尝试过的信息,以便我们知道您的问题究竟是什么。
  • 我试过了。但它不起作用。因此,我删除了所有我尝试过的作品,并在没有它们的情况下发表了它。正如我之前所说,我是编程的初学者!而且我想要具有共享偏好的现成代码!看到准备好的一个,我就明白了!谢谢!

标签: java android android-webview sharedpreferences


【解决方案1】:

如果我正确理解您的目标,这将是您实现目标的方法。

  1. 选择单选按钮后,应用会将选择的单选按钮保存到 SharedPreferences。
  2. 下次加载应用时,它会检查 SharedPreferences 值并加载相应的 HTML 文件。

因此,在您的 onRadioButtonClicked() 上,您可以添加以下代码来保存按下的单选按钮:

public void onRadioButtonClicked(View views){
    boolean isSelected = ((AppCompatRadioButton) views).isChecked();
    SharedPreferences sharedPref = getSharedPreferences("omg", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();

    switch (views.getId()){
        case R.id.rbLeft:
            if (isSelected){
                rbLeft.setTextColor(Color.WHITE);
                rbRight.setTextColor(Color.RED);
                rbCenter.setTextColor(Color.RED);
                view.loadUrl("file:///android_asset/index1.html");
                editor.putString("last_button", "rbLeft");
                editor.apply();
            }
            break;

        case R.id.rbCenter:
            if (isSelected){
                rbLeft.setTextColor(Color.RED);
                rbRight.setTextColor(Color.RED);
                rbCenter.setTextColor(Color.WHITE);
                view.loadUrl("file:///android_asset/info.html");
                editor.putString("last_button", "rbCenter");
                editor.apply();
            }
            break;

        case R.id.rbRight:
            if (isSelected){
                rbLeft.setTextColor(Color.RED);
                rbRight.setTextColor(Color.WHITE);
                rbCenter.setTextColor(Color.RED);
                view.loadUrl("file:///android_asset/qollanma.html");
                editor.putString("last_button", "rbRight");
                editor.apply();
            }
            break;

    }

}

此代码将生成(如果没有匹配的 SharedPreference)或保存(如果有匹配的 SharedPreference)名为“omg”的 SharedPreference,并在您的设备存储中放置一个键名为“last_button”的值单选按钮名称,如下所示:

└ data\data\com.example.package\shared_prefs
    - omg.xml
└ data\data\com.example.package\shared_prefs\omg.xml
...
<string name="last_button">rbLeft</string>
...

所以,最后一件事是在加载应用程序时加载 SharedPreference 值。在你的onCreate()

...
view.getSettings().setSomeSettings();
view.setScrollBarStyle(Blabla);

SharedPreferences sharedPref = getSharedPreferences("omg", Context.MODE_PRIVATE)
switch (sharedPref.getString("last_button", "This will be the value when there was no matching key.") {
    case "rbLeft":
        rbLeft.setChecked(true);
        view.loadUrl("file:///android_asset/index1.html");
        break;

    case "rbCenter":
        rbCenter.setChecked(true);
        view.loadUrl("file:///android_asset/info.html");
        break;

    case "rbRight":
        rbRight.setChecked(true);
        view.loadUrl("file:///android_asset/qollanma.html");
        break;

    case "This will be the value when there was no matching key.":
        throw IllegalStateException("There was no matching key in omg SharedPreference.");
        break;

}

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多