Reputation: 1185
I have a android application which loads a website using webview. In my website landing page i have a form where user input a code number, according to that code number i am redirecting to a specific url of my site. Which works perfectly well in my website. What is did is stored the code in session with that url and when the same user load my site again it automatically redirect it to that page. But when i try this scenario using my android application, seems like session data not working. Can anyone help me out?
Here is my code:
package com.myPackageName;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Message;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
WebView myweb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myweb = findViewById(R.id.myWebView);
WebSettings myWebSettings = myweb.getSettings();
myWebSettings.setJavaScriptEnabled(true);
myWebSettings.setSupportMultipleWindows(true);
myWebSettings.setBuiltInZoomControls(true);
myweb.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
myweb.getSettings().setAppCacheEnabled(true);
myWebSettings.setDomStorageEnabled(true);
myWebSettings.setSavePassword(true);
myWebSettings.setSaveFormData(true);
myweb.setWebViewClient(new MyWebViewClient());
myweb.setWebChromeClient(new MyWebChromeClient());
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
myweb.loadUrl("https://www.mywebsite.com");
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
private class MyWebChromeClient extends WebChromeClient{
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
WebView newWebView = new WebView(MainActivity.this);
view.addView(newWebView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
//transport.getWebView();
resultMsg.sendToTarget();
//Toast.makeText(MainActivity.this, WebView.HitTestResult , Toast.LENGTH_LONG).show();
return true;
}
}
@Override
public void onBackPressed () {
if (myweb != null && myweb.canGoBack())
myweb.goBack();// if there is previous page open it
else
super.onBackPressed();//if there is no previous page, close app
}
}
Upvotes: 0
Views: 995
Reputation: 300
I think, that your problem lies in the fact, that each time you start your activity, the webview has no clue of the previous set cookies.
To overcome this problem, you might be able, to store your set cookies, re-inject them, when starting a new instance of your webview.
A reference on how to get the cookies can be found her: Reading cookies
Upvotes: 1