2017-07-28 116 views
0

我使用共享首选项来存储用户数据,并在电子商务网站的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); 
    } 

你的帮助是非常感谢,谢谢你在先进。

回答

0

你的意思是字符串变量isLoggedin总是假?你能提一下你为变量isLoggedin赋值的地方吗?

+0

默认是'private String isLoggedin =“false”;'它根据用户操作而变化。 –

+0

我看到在共享首选项中,保存登录状态的关键字是“isLogedin”,它与字符串变量“isLoggedin”不同,缺少一个'g'。另外,我看到用户成功登录后没有为字符串变量isLoggedin分配任务。 – Chithra

+0

对于迟到的回复。 isLoggedin是一个字符串,而isLogedin是一个标签,所以我使用缺少的“g”进行区分。你能告诉我一个代码,可以进一步帮助请 –

0

请尝试下面的代码,我用布尔值修改了putString。

boolean isLoggedin; 
SharedPreferences pref = 
      getApplicationContext().getSharedPreferences("Login", MODE_PRIVATE); 

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

    Log.e(TAG, "on page finished" + url); 

    isLoggedin = pref.getBoolean(“isLoggedin”, false); 

    if (url.equals(Constants.ACCOUNTURL) && url.equals(Constants.CARTURL) && !isLoggedin) { 
     Log.e(TAG, "reload"); 
     SharedPreferences.Editor editor = pref.edit(); 

     editor.putBoolean(“isLoggedin", 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(); 

     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')[0].innerHTML);"; 
     mainView.loadUrl("javascript: window.CallToAnAndroidFunction.getUserName" + getnamejs); 
    } 
    //if(url.equals(Constants.LOGOUTURL) && isLoggedin) { 
    if (url.equals(Constants.LOGOUTURL)) { 
     Log.e(TAG, "logging out-----------------"); 

     SharedPreferences.Editor editor = pref.edit(); 
     editor.putBoolean("isLoggedin", 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; 
    } 

让我知道这是否有帮助!

+0

嗨感谢您的代码和支持,我不得不解决代码达成解决方案为设置布尔值而不是字符串为isLoggedIn将导致代码的其他部分问题,他们工作正常。我编辑了我的问题,并能够解决问题的一部分,但在CartURL中,它一直显示为signed-即使我没有登录任何可能的解决方案吗? –