设置共享首选项 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);
}
}
然而登录总是错误的。
如下所示:
Retrieve a SharedPreferences object for accessing preferences that are
private to this activity
LoginActivity
和MainActivity
Activity都不同,所以总是false
.
在两个活动中使用 getSharedPreferences
而不是 getPreferences
来让它工作。
我正在使用 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);
}
}
然而登录总是错误的。
如下所示:
Retrieve a SharedPreferences object for accessing preferences that are private to this activity
LoginActivity
和MainActivity
Activity都不同,所以总是false
.
在两个活动中使用 getSharedPreferences
而不是 getPreferences
来让它工作。