我使用共享首选项来存储用户数据,并在电子商务网站的Web查看应用程序中设置登录状态。用户可以通过登录URL或在结账页面登录。我面对的问题是,我无法在用户成功登录后将登录状态设置为“True”,以便我可以检索它保持显示为“False”的用户名。Android WebView成功登录后将登录状态设置为True
编辑:在发布问题后,我能找到登录URL的解决方案的一部分,以将状态设置为true,但CARTURL无法正常工作。我定义了isRedirected = true;
并设置条件以获得正确的状态。
我重新张贴代码编辑后:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e(TAG, "should override url loading" + url);
view.loadUrl(url);
isRedirected = true;
return true;
}
public void onPageFinished(WebView view, String url) {
//webView.setClickable(true);menuBtn.setClickable(true);cartImg.setClickable(true);logoImg.setClickable(true);
Log.e(TAG, "on page finished" + url);
Log.e(TAG, "is logged in==" + isLoggedin);
isRedirected = true;
String isLoggedin = "false";
if(url.equals(Constants.ACCOUNTURL) && isRedirected && isLoggedin.equals("false")) {
Log.e(TAG, "reload");
//webView.loadUrl(Constants.ACCOUNTEDITURL);
SharedPreferences pref = getApplicationContext().getSharedPreferences("Login", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("isLogedin", "true");
editor.commit();
setWelcome();
Toast toast = Toast.makeText(MainActivity.this, "You have signed in", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
};
if(url.equals(Constants.CARTURL) && isRedirected && isLoggedin.equals("false")) {
Log.e(TAG, "Cart Login");
//webView.loadUrl(Constants.ACCOUNTEDITURL);
SharedPreferences pref = getApplicationContext().getSharedPreferences("Login", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("isLogedin", "true");
editor.commit();
setWelcome();
Toast toast = Toast.makeText(MainActivity.this, "You have signed in", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
};
//if(url.equals(Constants.LOGOUTURL) && isLoggedin.equals("true")) {
if(url.equals(Constants.LOGOUTURL)) {
Log.e(TAG, "logging out-----------------");
SharedPreferences pref = getApplicationContext().getSharedPreferences("Login", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("isLogedin", "false");
//editor.clear();
editor.commit();
setWelcome();
Toast toast = Toast.makeText(MainActivity.this, "You have logged out", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
//return;
}
if(isLoggedin.equals("true")) {
Log.e(TAG, "in get name-----------------");
mainView.addJavascriptInterface(new myJavaScriptInterface(), "CallToAnAndroidFunction");
//String getnamejs = "(document.getElementById('input-firstname').value);";
String getnamejs = "(document.getElementById('app_customer_name').innerHTML);";
mainView.loadUrl("javascript: window.CallToAnAndroidFunction.getUserName" + getnamejs);
}
你的帮助是非常感谢,谢谢你在先进。
默认是'private String isLoggedin =“false”;'它根据用户操作而变化。 –
我看到在共享首选项中,保存登录状态的关键字是“isLogedin”,它与字符串变量“isLoggedin”不同,缺少一个'g'。另外,我看到用户成功登录后没有为字符串变量isLoggedin分配任务。 – Chithra
对于迟到的回复。 isLoggedin是一个字符串,而isLogedin是一个标签,所以我使用缺少的“g”进行区分。你能告诉我一个代码,可以进一步帮助请 –