2017-04-11 36 views
-1

在我的应用程序中使用webview登录后显示用户数据,但是一旦从应用程序注销并在webview中以新用户登录。它显示旧的用户数据而不是新的。在登录之前已经清除了cookie,会话和数据库,但它不起作用。Webview在注销后显示旧用户数据

这里是我的登录页面代码

public class Login_Activity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

    private EditText et_username, et_password; 
    private List<String> categories = new ArrayList<String>(); 
    private List<String> categoriesLink = new ArrayList<String>(); 
    private ArrayAdapter<String> dataAdapter; 
    private Spinner spinner; 
    private ProgressDialog prDialog; 
    private CheckBox saveLoginCheckBox; 
    private SharedPreferences loginPreferences; 
    private SharedPreferences.Editor loginPrefsEditor; 
    private Boolean saveLogin; 
    private DatabaseHandler databaseHandler; 
    private String txt_username, txt_password; 
    private String pre_username; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     getSupportActionBar().setTitle(""); 


     /* .. NewworkonMain ThradException error solution*/ 

     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 

     databaseHandler = new DatabaseHandler(Login_Activity.this); 
     setcontent(); 
    } 

    private void setcontent() { 
     et_username = (EditText) findViewById(R.id.et_username); 
     et_password = (EditText) findViewById(R.id.et_password); 
     saveLoginCheckBox = (CheckBox) findViewById(R.id.saveLoginCheckBox); 
     loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE); 
     loginPrefsEditor = loginPreferences.edit(); 

     // Spinner element 
     spinner = (Spinner) findViewById(R.id.spinner); 
     // spinner.setPrompt("Service Name"); 
     saveLogin = loginPreferences.getBoolean(AppConstant.PREF_SAVE_LOGIN, false); 
     if (saveLogin == true) { 
      et_username.setText(loginPreferences.getString(AppConstant.PREF_USER_NAME, "")); 
      // et_password.setText(loginPreferences.getString("password1", "")); 
      saveLoginCheckBox.setChecked(true); 
     } 
     // Login Button 
     Button btn_login = (Button) findViewById(R.id.btn_login); 
     btn_login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // Internet Connection 
       if (!Common.isInternetOn(Login_Activity.this)) { 
        Toast.makeText(Login_Activity.this, "Please check your Internet Connection", Toast.LENGTH_SHORT).show(); 
        return; 
       } 
       // Null Value Validation 
       int pos = spinner.getSelectedItemPosition(); 
       if (pos == 0 || pos == -1) { 
        Toast.makeText(Login_Activity.this, "Please add service name", Toast.LENGTH_SHORT).show(); 
        return; 
       } 
       if (TextUtils.isEmpty((et_username.getText().toString().trim()))) { 
        Toast.makeText(Login_Activity.this, "Please add username", Toast.LENGTH_SHORT).show(); 
        return; 
       } 
       if (TextUtils.isEmpty((et_password.getText().toString().trim()))) { 
        Toast.makeText(Login_Activity.this, "Please add password", Toast.LENGTH_SHORT).show(); 
        return; 
       } 

       pre_username = et_username.getText().toString(); 
       // String passoed1 = et_password.getText().toString(); 

       if (saveLoginCheckBox.isChecked()) { 
        loginPrefsEditor.putBoolean(AppConstant.PREF_SAVE_LOGIN, true); 
        loginPrefsEditor.putString(AppConstant.PREF_USER_NAME, pre_username); 
        loginPrefsEditor.putString(AppConstant.PREF_SELECTED_SERVICE, spinner.getSelectedItem().toString()); 
        // loginPrefsEditor.putString("password1", passoed1); 
        loginPrefsEditor.commit(); 
       } else { 
        loginPrefsEditor.clear(); 
        loginPrefsEditor.commit(); 
       } 

       // add http logic 
       if (categories != null && categories.size() > 0) { 
        selectedPath = categoriesLink.get(pos); 
        if (!TextUtils.isEmpty(selectedPath)) { 
         if (!selectedPath.toLowerCase().contains("http")) 
          selectedPath = "http://" + selectedPath; 
         new SaveAppData().execute(); 
        } 
       } 
      } 
     }); 

     //Add Button 
     Button btn_add = (Button) findViewById(R.id.btn_add); 
     btn_add.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Login_Activity.this, AddServiceName_Activity.class); 
       startActivityForResult(intent, 999); 
      } 
     }); 
     checkPermission(); 
    } 

    private void fillUpSpinner() { 
     categories.clear(); 
     categoriesLink.clear(); 
     List<ServiceDetails> serviceList = databaseHandler.getAllServiceList(); 
     for (int i = 0; i < serviceList.size(); i++) { 
      ServiceDetails serviceDetail = serviceList.get(i); 
      categories.add(serviceDetail.getName()); 
      categoriesLink.add(serviceDetail.getUrl()); 
     } 
     if (categories.size() > 0) { 
      categories.add(0, "Select service name"); 
      categoriesLink.add(0, ""); 
     } else { 
      categories.add("Add service name"); 
      categoriesLink.add(""); 
     } 

     if (dataAdapter == null) { 
      dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories); 
      // Drop down layout style - list view with radio button 
      dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      // attaching data adapter to spinner 
      spinner.setAdapter(dataAdapter); 
      if (saveLogin) { 
       String selectedService = loginPreferences.getString("selected_service", ""); 
       if (!TextUtils.isEmpty(selectedService)) { 
        int pos = categories.indexOf(selectedService); 
        spinner.setSelection(pos); 
       } 
      } 
      spinner.setOnItemSelectedListener(this); 
     } else { 
      dataAdapter.notifyDataSetChanged(); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 999) { 
      if (resultCode == Activity.RESULT_OK) { 
      /* String serName = data.getStringExtra("serName"); 
       String serUrl = data.getStringExtra("serUrl");*/ 
       fillUpSpinner(); 
       /*categories.clear(); 
       categoriesLink.clear();*/ 
       /*categories.add(0, serName); 
       categoriesLink.add(0, serUrl); 
       dataAdapter.notifyDataSetChanged(); 
       spinner.setSelection(0);*/ 
      } else { 
       if (!saveLoginCheckBox.isChecked()) { 
        // spinner.setSelection(0); 
        et_username.setText(""); 
        et_password.setText(""); 
       } 
      } 
     } 
    } 

    String selectedPath = null; 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     // On selecting a spinner item 
     // String item = parent.getItemAtPosition(position).toString(); 
     // Showing selected spinner item 
     // Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
    } 

    // SaveAppData Web API Method 
    public class SaveAppData extends AsyncTask<String, Void, String> { 
     String str = "A"; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      prDialog = new ProgressDialog(Login_Activity.this); 
      prDialog.setMessage("Please wait ..."); 
      prDialog.show(); 
     } 

     Response responseValue; 

     @Override 
     protected String doInBackground(String... params) { 
      TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
      String device_id = telephonyManager.getDeviceId(); 

      // String url = "http://192.168.0.122:5000/api/Login/SaveAppData?deviceID=" + device_id + "&deviceType=" + str; 
      if (!selectedPath.endsWith("/")) { 
       selectedPath = selectedPath + "/"; 
      } 

      SharedPreferences sp = getApplicationContext().getSharedPreferences(AppConstant.PREF_SELECTED_PATH, 0); 
      SharedPreferences.Editor editor = sp.edit(); 
      editor.putString(AppConstant.PREF_URI_SELECTEDPATH, selectedPath); 
      editor.commit(); 

      String url = (selectedPath + "api/Login/SaveAppData?deviceID=" + device_id + "&deviceType=" + str); 
      JSONObject jsonObject = new JSONObject(); 
      //WebAPI.PostData(url, jsonObject.toString()); 
      responseValue = WebAPI.PostDataWithStatusCode(Login_Activity.this, url, jsonObject.toString()); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      /* if(prDialog!=null){ 
       prDialog.dismiss(); 
      }*/ 
      try { 
       if (responseValue != null) { 
        int code = responseValue.code(); 
        String str = responseValue.body().string(); 

        if (code == 200) { 
         parseResponseAndSaveDefaultURL(str); 
         new AuthenticateUser().execute(); 
        } else { 
         Toast.makeText(Login_Activity.this, "Please enter valid Host Name", Toast.LENGTH_SHORT).show(); 
        } 
       } else { 
        Toast.makeText(Login_Activity.this, "Please enter valid Host Name", Toast.LENGTH_SHORT).show(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

    // get WebURL from SaveAppData Response 
    private void parseResponseAndSaveDefaultURL(String str) { 
     try { 
      String res = str; 
      JSONArray jsonArray = new JSONArray(res); 
      JSONObject jsonObject = jsonArray.getJSONObject(1); 
      String url = jsonObject.getString("value"); 
      if (!TextUtils.isEmpty(url)) { 
       SharedPreferences pref_token = PreferenceManager.getDefaultSharedPreferences(Login_Activity.this); 
       SharedPreferences.Editor editor = pref_token.edit(); 
       editor.putString(AppConstant.PREF_RESPONCE_DEFAULT_URL, url); 
       editor.commit(); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    // AuthenticateUser Web API Method 
    public class AuthenticateUser extends AsyncTask<String, String, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      /* prDialog = new ProgressDialog(Login_Activity.this); 
      prDialog.setMessage("Please wait ..."); 
      prDialog.show();*/ 
      txt_username = et_username.getText().toString(); 
      txt_password = et_password.getText().toString(); 
     } 

     Response responseValue; 

     @Override 
     protected String doInBackground(String... params) { 
      TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
      String device_id = telephonyManager.getDeviceId(); 
      try { 
       JSONObject jsonObject = new JSONObject(); 
       jsonObject.put("username", txt_username); 
       jsonObject.put("password", txt_password); 
       jsonObject.put("deviceID", device_id); 
       /*String response = WebAPI.PostData("http://192.168.0.122:5000//api/Login/AuthenticateUser", jsonObject.toString());*/ 
       if (!selectedPath.endsWith("/")) { 
        selectedPath = selectedPath + "/"; 
       } 
       //  String response = WebAPI.PostData(Login_Activity.this,selectedPath+"api/Login/AuthenticateUser",jsonObject.toString()); 
       responseValue = WebAPI.PostDataWithStatusCode(Login_Activity.this, selectedPath + "api/Login/AuthenticateUser", jsonObject.toString()); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      if (prDialog != null) { 
       prDialog.dismiss(); 
      } 
      try { 
       if (responseValue != null) { 
        int code = responseValue.code(); 
        String str = responseValue.body().string(); 
        if (code == 200) { 

         CookieSyncManager.createInstance(Login_Activity.this); 
         CookieManager cookieManager = CookieManager.getInstance(); 
         cookieManager.removeAllCookie(); 
         cookieManager.removeSessionCookie(); 
         cookieManager.setAcceptCookie(false); 
         clearCacheFromWebView(); 

         WebViewDatabase.getInstance(Login_Activity.this).clearHttpAuthUsernamePassword(); 
         WebViewDatabase.getInstance(Login_Activity.this).clearUsernamePassword(); 
         WebViewDatabase.getInstance(Login_Activity.this).clearFormData(); 
         deleteDatabase("webview.db"); 
         deleteDatabase("webviewCache,db"); 

         Intent intent = new Intent(Login_Activity.this, Home_Activity.class); 
         startActivity(intent); 
         finish(); 

         SharedPreferences pref_token = PreferenceManager.getDefaultSharedPreferences(Login_Activity.this); 
         SharedPreferences.Editor editor = pref_token.edit(); 
         editor.putString(AppConstant.PREF_RESPONCE_TOKEN, str); 
         editor.commit(); 
        } else { 
         Toast.makeText(Login_Activity.this, "Please enter valid username or password", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(Login_Activity.this); 
      SharedPreferences.Editor editor = pref.edit(); 
      editor.putString(AppConstant.PREF_USER_NAME, txt_username); 
      editor.putString(AppConstant.PREF_PASSWORD, txt_password); 
      editor.commit(); 
     } 
    } 

回答

0

我猜你是从SharedPreferences values.So确定当前用户,你有你开始HomeActivity之前进行更改SharedPreferences。

希望它对你有所帮助。谢谢。

更新(代码)

protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     if (prDialog != null) { 
      prDialog.dismiss(); 
     } 
     try { 
      if (responseValue != null) { 
       int code = responseValue.code(); 
       String str = responseValue.body().string(); 
       if (code == 200) { 

        CookieSyncManager.createInstance(Login_Activity.this); 
        CookieManager cookieManager = CookieManager.getInstance(); 
        cookieManager.removeAllCookie(); 
        cookieManager.removeSessionCookie(); 
        cookieManager.setAcceptCookie(false); 
        clearCacheFromWebView(); 

        WebViewDatabase.getInstance(Login_Activity.this).clearHttpAuthUsernamePassword(); 
        WebViewDatabase.getInstance(Login_Activity.this).clearUsernamePassword(); 
        WebViewDatabase.getInstance(Login_Activity.this).clearFormData(); 
        deleteDatabase("webview.db"); 
        deleteDatabase("webviewCache,db"); 

        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(Login_Activity.this); 
        SharedPreferences.Editor editor = pref.edit(); 
        editor.putString(AppConstant.PREF_USER_NAME, txt_username); 
        editor.putString(AppConstant.PREF_PASSWORD, txt_password); 
        editor.commit(); 

        Intent intent = new Intent(Login_Activity.this, Home_Activity.class); 
        startActivity(intent); 
        finish(); 

        SharedPreferences pref_token = PreferenceManager.getDefaultSharedPreferences(Login_Activity.this); 
        SharedPreferences.Editor editor = pref_token.edit(); 
        editor.putString(AppConstant.PREF_RESPONCE_TOKEN, str); 
        editor.commit(); 
       } else { 
        Toast.makeText(Login_Activity.this, "Please enter valid username or password", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 
+0

注销之前,我清除所有商店SharedPreferences值在调试得到了有效的用户名和密码,但数据应显示老用户 – bipin

+0

@覆盖 保护无效onPostExecute(String s)将{super_onPostExecute(s); (prDialog!= null){ prDialog.dismiss(); } Intent intent = new Intent(Home_Activity.this,Login_Activity.class); startActivity(intent); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); finish(); } } – bipin

+0

对不起,延迟回复。这段代码是什么意思?如果它是新的onPostExecute(),我没有看到它所需的更改。否则,请用新的onPostExecute()更新这个问题 –