【问题标题】:Webview show old user Data after Logout注销后Webview显示旧用户数据
【发布时间】:2017-04-11 13:57:37
【问题描述】:

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

这是我的登录页面代码

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

【问题讨论】:

    标签: android webview


    【解决方案1】:

    我猜你是根据 SharedPreferences 值确定当前用户。所以,你必须在启动 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();
            }
    }
    

    【讨论】:

    • 在注销之前我清除所有存储 SharedPreferences 值并在调试中获取有效的用户名和密码,但数据应该显示旧用户
    • @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (prDialog != null) { prDialog.dismiss();意图意图=新意图(Home_Activity.this,Login_Activity.class);开始活动(意图); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);意图.addFlags(意图.FLAG_ACTIVITY_NEW_TASK);结束(); } }
    • 抱歉回复晚了。这段代码是什么意思?如果它是新的 onPostExecute(),我没有看到它需要的更改。否则请使用新的 onPostExecute() 更新问题
    • 这段代码意味着在注销之前我已经清除了 SharedPreferences 中的所有数据......也尝试使用这个但不起作用......SharedPreferences preferences =getSharedPreferences("loginPrefs",Context .MODE_PRIVATE); SharedPreferences.Editor 编辑器=preferences.edit();编辑器.clear(); editor.commit();
    • 已经尝试过仍然无法正常工作..感谢您的帮助..
    猜你喜欢
    • 2013-09-05
    • 2014-12-12
    • 2020-09-30
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多