设置共享首选项 Volley StringRequest

Set Shared Preference Volley StringRequest

我正在使用 Volley 发出 HTTP Post 请求。

这工作正常,但是在我试图设置 SharedPreference 值的 onResponse 方法中,这个值似乎没有被设置。

凌空码:

public void sendPostRequest() {

        RequestQueue queue = Volley.newRequestQueue(this);

        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                progress.dismiss();
                try {
                    JSONObject obj = new JSONObject(response);
                    if (obj.has("success")){

                        SharedPreferences sharedPref = LoginActivity.this.getPreferences(Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPref.edit();
                        editor.putBoolean("loggedIn", true);
                        editor.commit();

                        Intent intent = new Intent(LoginActivity.this, SearchActivity.class);
                        startActivity(intent);
                    }else{
                        error.setText(obj.getString("error"));
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                System.out.println("volley Error .................");
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();

                params.put("username", emailTxt.getText().toString());
                params.put("password", passwordTxt.getText().toString());
                return params;
            }
        };

        queue.add(stringRequest);


    }

Intent 被触发,所以我知道我们正在成功执行 if 语句。

下面的代码是 运行 在启动器中 activity 如果用户已经登录

则绕过登录

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        getSupportActionBar().hide();

        SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);

        boolean loggedIn = sharedPref.getBoolean("loggedIn", false);

                if (loggedIn){
                    Intent intent = new Intent(MainActivity.this, SearchActivity.class);
                    startActivity(intent);
                }else{
                    Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
                    startActivity(intent);
                }

    }

然而登录总是错误的。

如下所示:

getPreferences

Retrieve a SharedPreferences object for accessing preferences that are private to this activity

LoginActivityMainActivityActivity都不同,所以总是false.

在两个活动中使用 getSharedPreferences 而不是 getPreferences 来让它工作。