标签: android-sharedpreferences

主持人是否知道MVP模式中的活动/上下文是个坏主意?

我已经玩了几个星期的MVP模式,我已经到了需要上下文来启动service和访问的地步Shared Preferences.

我已经读过MVP的目的是将视图与逻辑分离,并且context在一个内部Presenter可以打败那个目的(如果我错了,请纠正我).

目前,我有一个看起来像这样的LoginActivity:

LoginActivity.java

public class LoginActivity extends Activity implements ILoginView {

    private final String LOG_TAG = "LOGIN_ACTIVITY";

    @Inject
    ILoginPresenter mPresenter;
    @Bind(R.id.edit_login_password)
    EditText editLoginPassword;
    @Bind(R.id.edit_login_username)
    EditText editLoginUsername;
    @Bind(R.id.progress)
    ProgressBar mProgressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        MyApplication.getObjectGraphPresenters().inject(this);
        mPresenter.setLoginView(this, getApplicationContext());
    }

    @Override
    public void onStart() {
        mPresenter.onStart();
        ButterKnife.bind(this);
        super.onStart();
    }

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

    @Override
    public void onPause() {
        mPresenter.onPause();
        super.onPause();
    }

    @Override
    public void onStop() …
Run Code Online (Sandbox Code Playgroud)

mvp android android-sharedpreferences

56
推荐指数
2
解决办法
2万
查看次数

如何检查adb shell中的SharedPreferences?

既然我们可以从远程Shell中检查sqlite3数据库,是否可以检查adb shell中的SharedPreferences?因为在调试时从命令行检查和操作SharedPreferences会更方便.

或者以另一种方式,在什么文件中保存SharedPreferences,以及如何查看和修改这些文件?

android adb android-sharedpreferences

40
推荐指数
5
解决办法
3万
查看次数

PreferenceFragment - getPreferenceManager()和getPreferenceScreen()之间的区别?

我已经实现了我自己的PreferenceFragment子类(在此详述),并希望在其中监听偏好更改.PreferenceFragment为您提供了两种执行此操作的方法:

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
Run Code Online (Sandbox Code Playgroud)

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
Run Code Online (Sandbox Code Playgroud)

应该使用哪一个?有什么不同?我真的不明白Android文档中区别.

android android-preferences android-sharedpreferences

37
推荐指数
3
解决办法
7341
查看次数

java.lang.SecurityException:不再支持MODE_WORLD_READABLE

例外情况仅发生在Android 7.0 Nougat(模拟器)设备中.

java.lang.SecurityException:不再支持MODE_WORLD_READABLE

我的代码:

public void SessionMaintainence(Context context) {
    this.context = context;
    preferences = context.getSharedPreferences(PREF_NAME, Context.MODE_WORLD_READABLE);
    editor = preferences.edit();
    editor.commit();
}
Run Code Online (Sandbox Code Playgroud)

logcat的:

> E/AndroidRuntime: FATAL EXCEPTION: main
>                                                  Process: burpp.av.feedback, PID: 2796
>                                                  java.lang.RuntimeException: Unable to create application
> burpp.av.feedback.FeedbackApplication: java.lang.SecurityException:
> MODE_WORLD_READABLE no longer supported
>                                                      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5364)
>                                                      at android.app.ActivityThread.-wrap2(ActivityThread.java)
>                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528)
>                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
>                                                      at android.os.Looper.loop(Looper.java:154)
>                                                      at android.app.ActivityThread.main(ActivityThread.java:6077)
>                                                      at java.lang.reflect.Method.invoke(Native Method)
>                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
>                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
>                                                   Caused by: java.lang.SecurityException: MODE_WORLD_READABLE …
Run Code Online (Sandbox Code Playgroud)

android android-securityexception android-sharedpreferences android-7.0-nougat

23
推荐指数
1
解决办法
3万
查看次数

setDisplayHomeAsUpEnabled()在PreferenceActivity中不起作用

我有一个SettingsActivity扩展PreferenceActivity到我的应用程序中显示设置.

有一个后退箭头,但它不起作用.

这是SettingsActivity.java文件的代码:

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{

    private AppCompatDelegate mDelegate;

    public static final String RESET_PASSWORD_KEY = "reset_password";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        getDelegate().installViewFactory();
        getDelegate().onCreate(savedInstanceState);
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        SharedPreferences sharedPreferencesCompat = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

        Preference myPref = (Preference) findPreference(RESET_PASSWORD_KEY);
        myPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                //open browser or intent here
                Intent resetPasswordActivityIntent = new Intent(SettingsActivity.this, ResetPasswordActivity.class);
                startActivity(resetPasswordActivityIntent);
                return true;
            }
        });

    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android preferenceactivity android-preferences android-sharedpreferences

14
推荐指数
2
解决办法
1万
查看次数

Android偏好 - 有什么区别?

当我得到偏好时,有什么区别:

PreferenceManager.getDefaultSharedPreferences(getBaseContext());
Run Code Online (Sandbox Code Playgroud)

getPreferences(Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

android android-preferences android-sharedpreferences

12
推荐指数
1
解决办法
5645
查看次数

getDefaultSharedPreferences()和getPreferences()之间有什么区别?

我目前正在开发"开发Android应用程序"Udacity课程.在"第3课:新活动和意图>使用SharedPreferences"部分中,教师要求我在Android开发者网站上挖掘如何获取用户首选项SharedPreferences.但是,我发现官方文档和课程解决方案之间存在差异.

Udacity课程的解决方案说,为了抓住一个SharedPreferences实例PreferenceActivity,你应该打电话:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
Run Code Online (Sandbox Code Playgroud)

(这里getActivity()只是在Context这里,因为它在里面被称为Fragment.)

虽然Android开发者网站上的官方文档表明您应该致电:

SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)
Run Code Online (Sandbox Code Playgroud)

那么PreferenceManager.getDefaultSharedPreferences(Context context)和之间的区别是Activity.getPreferences(int mode)什么?

请注意:此问题不涉及getSharedPreferences()需要文件名的任何内容.这是关于之间的差异getPreferences()getDefaultSharedPreferences().

提前致谢.

android android-preferences android-sharedpreferences

12
推荐指数
4
解决办法
1万
查看次数

Android O中的PreferenceDataStore

我读过这篇文章https://medium.com/@ianhlake/hidden-gems-of-android-o-7def63136629.这就是那里写的:

SharedPreferences已经死了.累积的SharedPreferences.

SharedPreferences继续在Android O中工作吗?我们是否需要实现自己的机制,通过实现将数据存储在键值对中PreferenceDataStore

任何人都可以帮助实现新的SharedPreferences使用方法 PreferenceDataStore和开发自己实现的用例是什么?目前的方法有任何缺点吗?

android android-preferences android-sharedpreferences

12
推荐指数
2
解决办法
1251
查看次数

具有共享首选项的LiveData

我有一个设置屏幕,在其中设置一些值。设置这些值时,它将保存在共享首选项中,并且在我对网络api调用的请求中需要这些值作为参数。

现在,我可以在活动中使用侦听器共享首选项,然后进行api调用并获取新数据,但是我想将其与LiveData一起使用。

如何使用LiveData侦听共享首选项中的更改,然后使用新参数进行网络呼叫。

android android-sharedpreferences android-livedata

10
推荐指数
3
解决办法
6597
查看次数

VM广泛的cookie管理意味着什么?

我正在学习cookies在Android中存储并遇到了几种实现它的方法.其中一个是使用CookieManager and CookieStore.

当我浏览Android文档时,我发现了以下声明:

为了在客户端和服务器之间建立和维护可能长期存在的会话,HttpURLConnection包括一个可扩展的cookie管理器.使用CookieHandler和CookieManager启用VM范围的cookie管理:

CookieManager cookieManager = new CookieManager();  
CookieHandler.setDefault(cookieManager);
Run Code Online (Sandbox Code Playgroud)

我不明白的意思VM-wide cookie management.我知道VM意味着Virtual Machine.

我的解释:

  1. 我解释它的一种方法是,创建CookieManager并传递它以setDefault()使其在整个应用程序中可用.因此,我尝试了以下测试.

     URL url = new URL("http://something.com");
     URI uri=new URI("http://something.com");
     urlConnection = (HttpURLConnection) url.openConnection();
     cks=urlConnection.getHeaderField("Set-Cookie");  
     //cks is a String
     cookieManager=new CookieManager();
     CookieHandler.setDefault(cookieManager);
     HttpCookie hc=new HttpCookie("Cookie1",cks);
     cookieManager.getCookieStore().add(uri,hc);
     cks1=cookieManager.getCookieStore().getCookies().get(0).getValue();
     //cks1 is another String
    
    Run Code Online (Sandbox Code Playgroud)

    我设置cks and cks1TextViews并按content/value预期打印cookie .根据我的解释,我尝试cookieManager.getCookieStore().getCookies().get(0).getValue();了另一个活动,但它没有识别出对象,这意味着它超出了范围而且无法访问.此外,创建了一个新的,CookieManager并尝试获取cookie,但它返回null.因此,我假设可以跨活动访问VM范围的这种解释是不正确的.

  2. 第二个解释是Cookies将在CookieManager设置时自动存储.我从SO的另一个问题的解决方案中得到了它:使用Java URLConnection进行Cookie管理

解决方案中的一个陈述如下: …

cookies android httpurlconnection android-cookiemanager android-sharedpreferences

8
推荐指数
1
解决办法
227
查看次数