2016-06-02 4 views
0

Я использую Volley для отправки HTTP-запроса.Set Shared Preference Volley StringRequest

Это прекрасно работает, однако внутри метода onResponse я пытаюсь установить значение SharedPreference, однако это значение, похоже, не задается.

залпа код:

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); 


    } 

Намерение увольняют, так что я знаю, что мы ударять успех, если заявление.

Ниже код запускается в пусковой активности на объездной входа, если пользователь уже вошел в

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); 
       } 

    } 

Однако LoggedIn всегда ложно.

+1

Этот код находится в заставке? – Piyush

+0

@PiyushGupta да нижний код - это штриховой код –

+0

Тогда вы должны вызвать эту функцию перед загрузкой ваших просмотров. Запишите это _loggedIn _ в заставку, каково значение для него? – Piyush

ответ

3

Как видим здесь:

getPreferences

считывают SharedPreferences объект для доступа к предпочтениям, которые приватных этой деятельности

Оба LoginActivity и MainActivity активность отличается, поэтому получать всегда false.

Используйте getSharedPreferences вместо getPreferences в обеих мероприятиях, чтобы заставить его работать.

Смежные вопросы