我该如何解决不断出现在web视图认证消息?出现在、我该、视图、如何解决

2023-09-05 00:12:57 作者:六个字最好的微信昵称

我有一个验证的web视图,其中认证消息不断弹出的WebView功能片段时called.The认证弹出是故障code 410(在已经签署:登录/取消)消息,怎么办我传递给保持我的Cookie会话ID?任何线索?谢谢! PS:请尊重我的code编程解释尽可能因为它很难,当你没有code解释明白

下面是我的code对于给定的片段:

 公共类WebViewFragment扩展片段实现OnClickListener,MainActivity.Back pressListener<片断> {

        私有静态最后弦乐SEARCH_TERM =SEARCH_TERM;
        私有静态字符串mSearchTerm;
        私人的WebView mWebview;
        私有静态WebViewFragment sUserProfileManager;



        公共最后静态字符串符号=符号;

        公共静态INT PIC_WIDTH = 30;
        私有静态最后弦乐SYMBOL_TYPE =symbol_type;
        公共静态最后弦乐CONTAINER_ID =container_id;
        公共静态最后弦乐TAG_FRAGMENT_WEBVIEW =WebViewFragment;
        共享preferencesManager经理=共享preferencesManager.getInstance();
        私有静态字符串的URL;
        私人最终字符串username = manager.getLoginUsername();
        私人最终字符串PASSWORD = manager.getDecryptedLoginPassword();

        的LinearLayout进度;
        私有静态WebViewFragment __newInstance(最终WebViewFragment片段,最终FragmentManager经理,
                最终字符串搜索关键词,最后弦乐symbolType,诠释containerViewId,最终诠释inAnimation,最终诠释outAnimation,最终诠释popInAnimation,最终诠释popOutAnimation){

            最后的捆绑包=新包();
            bundle.putString(SEARCH_TERM,搜索关键词);
            bundle.putString(WebViewFragment.SYMBOL_TYPE,symbolType);
            bundle.putInt(WebViewFragment.CONTAINER_ID,containerViewId);
            fragment.setArguments(包);

            FragmentInfo fragmentInfo =新FragmentInfo(TransactionMethods.ADD,containerViewId);
            fragmentInfo.setAnimation(inAnimation,outAnimation);
            fragmentInfo.setPopAnimation(popInAnimation,popOutAnimation);

            fragmentInfo.setFragmentTag(TAG_FRAGMENT_WEBVIEW);
            fragmentInfo.setActionBarTitle(Application.getAp presources()的getString(R.string.title_search));
            。FragmentStackManager.getInstance()transitionFragment(经理,片段,fragmentInfo);
            URL =的getURL();
            返回片段;
        }

         @覆盖
            公共无效的onCreate(包savedInstanceState){
                super.onCreate(savedInstanceState);

                捆绑包= this.getArguments();
                URL =的getURL();

                如果(捆绑!= NULL)
                    mSearchTerm = getArguments()的getString(SEARCH_TERM)。

                 }
         公共无效setSearchTerms(字符串sTerms){
             mSearchTerm = sTerms;
         }
        公共静态无效removeInstance(最终FragmentManager经理){
            最后WebViewFragment片段=(WebViewFragment)manager.findFragmentByTag(TAG_FRAGMENT_WEBVIEW);
            如果(片段== NULL){
                返回;
            }

            最终FragmentStackManager stackManager = FragmentStackManager.getInstance();
            如果(stackManager.getTopFragment()的instanceof WebViewFragment){
                stackManager.popTopFragment();
            }
        }
        私人布尔goingBack = FALSE;
        私人布尔onBack pressClearStack = TRUE;

        公共无效setOnBack pressClearStack(布尔B){
            b onBack pressClearStack =;
        }


        公共布尔webViewSteppedBack(){
            如果(mWebview =空&安培;!&安培; mWebview.canGoBack()){
                  最后动画滑动=新TranslateAnimation(100,1000,0,0);
                    slide.setDuration(800);


                    mWebview.startAnimation(幻灯片);
                WebBackForwardList mWebBackForwardList = mWebview.copyBackForwardList();
                串historyUrl = mWebBackForwardList.getItemAtIndex(mWebBackForwardList.getCurrentIndex() -  1).getUrl();
                mWebview.goBack();

                返回true;
            }
            返回false;
        }


        @覆盖
        公共布尔回pressed(最终MainActivity mainActivity){
            如果(webViewSteppedBack()){
                返回true;
            }

            如果(onBack pressClearStack){
                goingBack = TRUE;
            }
            返回false;
        }
        私有静态字符串的getURL(){
            字符串URL =;

            最后弦乐getuuid =共享preferencesManager.getInstance()getUUID()。
            最后弦乐environmentApi =共享preferencesManager.getInstance()getEnvironmentApi()。
            如果(environmentApi.equalsIgnoreCase(NetworkUtils.Apis.ALPHA)){

                    URL = "https://cp.com/fwd/service/v1/?q="+mSearchTerm+"%20revenue&ui.theme=novadark&uuid="+getuuid+"&userAgent=android";



            }

             返回URL;
        }


        私有静态WebViewFragment __newInstance(最终WebViewFragment片段,最终FragmentManager经理,
                最终字符串搜索关键词,最后弦乐symbolType,诠释containerViewId){

            返回__newInstance(片段,经理,搜索关键词,symbolType,containerViewId,R.anim.slide_in_from_right,R.anim.slide_out_to_left,R.anim.slide_in_from_left,R.anim.slide_out_to_right);
        }
        私有静态无效clearWebView(最终FragmentManager经理){
            最后WebViewFragment片段=(WebViewFragment)manager.findFragmentByTag(TAG_FRAGMENT_WEBVIEW);
            如果(片段= NULL和放大器;!&安培;片段的instanceof WebViewFragment){
                ((WebViewFragment)片段).clearWebView();
            }
        }

        公共静态WebViewFragment的newInstance(最终FragmentManager经理,最终字符串搜索关键词,字符串symbolType){
            clearWebView(经理);
            返回__newInstance(新WebViewFragment(),经理,搜索关键词,symbolType,R.id.fragment_container);
        }

        公共静态WebViewFragment的newInstance(最终FragmentManager经理,最终字符串搜索关键词,字符串symbolType,诠释containerViewId){
            clearWebView(经理);
            返回__newInstance(新WebViewFragment(),经理,搜索关键词,symbolType,containerViewId);
        }

        公共静态WebViewFragment newInstanceNoBack pressed(最终FragmentManager经理,最终字符串搜索关键词,最后弦乐symbolType,诠释containerViewId){
            WebViewFragment片段= __newInstance(新WebViewFragment(),经理,搜索关键词,symbolType,containerViewId);
            fragment.setOnBack pressClearStack(假);
            返回片段;
        }

        公共静态WebViewFragment newInstanceNoBack pressed(最终WebViewFragment片段,最终FragmentManager经理,最终字符串搜索关键词,最后弦乐symbolType,诠释containerViewId){
            fragment.setOnBack pressClearStack(假);
            返回__newInstance(片段,经理,搜索关键词,symbolType,containerViewId);
        }

        公共静态WebViewFragment newInstanceForSearch(最终FragmentManager经理,最终字符串搜索关键词,字符串symbolType){
            WebViewFragment片段= __newInstance(新WebViewFragment(),经理,搜索关键词,symbolType,R.id.fragment_container,R.anim.no_animation,R.anim.slide_out_to_right,R.anim.slide_in_from_right,R.anim.slide_out_to_right);
            返回片段;
        }

        @覆盖
        公共无效onResume(){
            super.onResume();
            最后MainActivity活性=(MainActivity)getActivity();
            activity.updateActionBarTitle();
            activity.setBack pressListener(本);

            }
        公共无效clearWebView(){
            如果(mWebview!= NULL){
                mWebview.removeAllViews();
                mWebview.destroy();
                mWebview = NULL;
            }
        }
        @覆盖
        公共无效的onClick(视图v){

          getActivity()完成()。
        }

        @燮pressWarnings(德precation)
        @燮pressLint({
                SetJavaScriptEnabled,NewApi
        })
        @覆盖
        公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
            如果(goingBack){
                返回null;
            }
            最后MainActivity活性=(MainActivity)getActivity();

            activity.setBack pressListener(本);
            查看查看= inflater.inflate(R.layout.fragment_search,集装箱,假);


            mWebview =(web视图)view.findViewById(R.id.webview);
            进度=(的LinearLayout)view.findViewById(R.id.loading);
            mWebview.setVisibility(View.VISIBLE);

            progressBar.setVisibility(View.VISIBLE);

                mWebview.setWebViewClient(新MyWebViewClient(这一点,mWebview));
                。mWebview.getSettings()setUseWideViewPort(真正的);

                mWebview.setBackgroundColor(0);
                。mWebview.getSettings()setJavaScriptCanOpenWindowsAutomatically(真正的);
                。mWebview.getSettings()setAllowFileAccess(真正的);
                mWebview.getSettings()setDomStorageEnabled(真)。
                mWebview.getSettings()setJavaScriptEnabled(真)。

                mWebview.setScrollbarFadingEnabled(假);
                。mWebview.getSettings()getLoadsImagesAutomatically();

                    android.webkit.CookieManager webCookieManager =
                        CookieManager.getInstance();
                    webCookieManager.setAcceptCookie(真正的);


                mWebview.setWebChromeClient(新WebChromeClient(){
                       @覆盖
                       公共无效onReceivedTitle(web视图查看,串题){
                          super.onReceivedTitle(查看,职称);

                          字符串SERVERERROR =412;
                          如果(title.contains(SERVERERROR)){
                              view.stopLoading();
                              SearchResultsFragment.newInstance(getFragmentManager(),mSearchTerm);
                          }
                       }
                    });
                如果(Build.VERSION.SDK_INT> = Build.VERSION_ codeS.HONEYCOMB)
                    。mWebview.getSettings()setDisplayZoomControls(假);
                共享preferencesManager经理=共享preferencesManager.getInstance();
                CookieStore的CookieStore的= mgr.getCookieStore();
                。饼干饼干= cookieStore.getCookies()得到(0);
                串cookieString = cookie.getName()+=+ cookie.getValue()+;域=+ cookie.getDomain();
                CookieManager cookieMgr = CookieManager.getInstance();
                cookieMgr.setCookie(URL,cookieString);



                mWebview.loadUrl(URL);


            返回查看;
        }


        公共类MyWebViewClient扩展WebViewClient {


            公共MyWebViewClient(WebViewFragment sWebViewFragment,的WebView的WebView){
                超();
            }
            @覆盖
            公共无效onPageStarted(web视图查看,字符串URL,位图图标){
                view.setVisibility(View.VISIBLE);

            }

            @覆盖
            公共无效onPageFinished(web视图查看,字符串URL){

                最终的动画渐变=新AlphaAnimation(0.0,1.0F);
                fade.setDuration(200);
                view.startAnimation(淡出);

                view.setVisibility(View.VISIBLE);

                progressBar.setVisibility(View.GONE);

            }


            @覆盖
            公共无效onReceivedError(web视图来看,INT错误code,字符串描述,字符串failingUrl){
                Toast.makeText(view.getContext(),验证错误,Toast.LENGTH_LONG).show();

                super.onReceivedError(查看,错误code,说明,failingUrl);
            }

            @覆盖
            公共无效onLoadResource(web视图查看,字符串URL){

            }

            @覆盖
            公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){

                    返回super.shouldOverrideUrlLoading(查看,网址);

            }

            @覆盖
            公共无效onReceivedHttpAuthRequest(web视图查看,最终HttpAuthHandler处理程序,最后弦乐主机,最后弦乐境界){

                    handler.proceed(用户名,密码);

        }


             @覆盖
            公共无效onReceivedSslError(web视图来看,SslErrorHandler处理器,SslError错误){
                handler.proceed();
            }
        }


    }
 

解决方案 cisco 路由器web界面没视图

如果您更换这样的:

 如果(environmentApi.equalsIgnoreCase(NetworkUtils.Apis.ALPHA)){

                    URL = "https://cp.com/fwd/service/v1/?q="+mSearchTerm+"%20revenue&ui.theme=novadark&uuid="+getuuid+"&userAgent=android";



            }
 

更动态的说:

  URL =共享preferencesManager.getInstance()。getXTRSAPEndPoint()代替(数据/,)+ "fwd/service/v1/?q="+mSearchTerm+"%20revenue&ui.theme=novadark&uuid="+getuuid+"&userAgent=android";
 

和修复的cookie

 字符串cookieString = cookie.getName()+=+ cookie.getValue()+;域=+ cookie.getDomain();
            至
 串cookieString = cookie.getName()+=+ cookie.getValue()+;域=+共享preferencesManager.getInstance()getXTRSAPEndPoint()替换(/数据/,) .replace(https://开头,);
 

它应该工作。

I have a webview with authentication, in which the authentication message keeps popping up for the webview fragment when called.The authentication popup is the fault code 410 (already signed in: sign in/cancel) message, How do I pass my cookies for the session id to be maintained? Any clues? thanks! P.S: Please explain programmatically with respect to my code wherever possible as it's hard to understand when you explain without code.

Here is my code for the given fragment:

  public class WebViewFragment extends Fragment implements OnClickListener , MainActivity.BackPressListener<Fragment> {

        private static final String SEARCH_TERM = "search_term";
        private static String mSearchTerm;
        private WebView mWebview;
        private static WebViewFragment sUserProfileManager;



        public  final static String SYMBOL = "symbol";

        public static int PIC_WIDTH = 30;
        private static final String SYMBOL_TYPE = "symbol_type";
        public  static final String CONTAINER_ID = "container_id";
        public static final String TAG_FRAGMENT_WEBVIEW = "WebViewFragment";
        SharedPreferencesManager manager = SharedPreferencesManager.getInstance();
        private static  String URL;
        private final  String USERNAME = manager.getLoginUsername();
        private final  String PASSWORD = manager.getDecryptedLoginPassword();

        LinearLayout progressBar;
        private static WebViewFragment __newInstance(final WebViewFragment fragment, final FragmentManager manager,
                final String searchTerm, final String symbolType, int containerViewId, final int inAnimation, final int outAnimation, final int popInAnimation, final int popOutAnimation) {

            final Bundle bundle = new Bundle();
            bundle.putString(SEARCH_TERM, searchTerm);
            bundle.putString(WebViewFragment.SYMBOL_TYPE, symbolType);
            bundle.putInt(WebViewFragment.CONTAINER_ID, containerViewId);
            fragment.setArguments(bundle);

            FragmentInfo fragmentInfo = new FragmentInfo(TransactionMethods.ADD, containerViewId);
            fragmentInfo.setAnimation(inAnimation, outAnimation);
            fragmentInfo.setPopAnimation(popInAnimation, popOutAnimation);

            fragmentInfo.setFragmentTag(TAG_FRAGMENT_WEBVIEW);
            fragmentInfo.setActionBarTitle(Application.getAppResources().getString(R.string.title_search));
            FragmentStackManager.getInstance().transitionFragment(manager, fragment, fragmentInfo);
            URL = getUrl();
            return fragment;
        }

         @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                Bundle bundle = this.getArguments();
                URL = getUrl();

                if(bundle != null)
                    mSearchTerm = getArguments().getString(SEARCH_TERM);

                 }
         public void setSearchTerms(String sTerms){
             mSearchTerm = sTerms;
         }
        public static void removeInstance(final FragmentManager manager) {
            final WebViewFragment fragment = (WebViewFragment) manager.findFragmentByTag(TAG_FRAGMENT_WEBVIEW);
            if (fragment == null) {
                return;
            }

            final FragmentStackManager stackManager = FragmentStackManager.getInstance();
            if (stackManager.getTopFragment() instanceof WebViewFragment) {
                stackManager.popTopFragment();
            }
        }
        private boolean goingBack = false;
        private boolean onBackPressClearStack = true;

        public void setOnBackPressClearStack(boolean b){
            onBackPressClearStack = b;
        }


        public boolean webViewSteppedBack() {
            if (mWebview != null && mWebview.canGoBack()) {
                  final Animation slide =  new TranslateAnimation(100, 1000, 0, 0);
                    slide.setDuration(800);


                    mWebview.startAnimation(slide);
                WebBackForwardList mWebBackForwardList = mWebview.copyBackForwardList();
                String historyUrl = mWebBackForwardList.getItemAtIndex(mWebBackForwardList.getCurrentIndex()-1).getUrl();
                mWebview.goBack();

                return true;
            }
            return false;
        }


        @Override
        public boolean backPressed(final MainActivity mainActivity) {
            if (webViewSteppedBack()) {
                return true;
            }

            if (onBackPressClearStack) {
                goingBack = true;
            }
            return false;
        }
        private static String getUrl(){
            String url = "";

            final String getuuid = SharedPreferencesManager.getInstance().getUUID();
            final String environmentApi = SharedPreferencesManager.getInstance().getEnvironmentApi();
            if (environmentApi.equalsIgnoreCase(NetworkUtils.Apis.ALPHA)) {

                    url = "https://cp.com/fwd/service/v1/?q="+mSearchTerm+"%20revenue&ui.theme=novadark&uuid="+getuuid+"&userAgent=android";



            } 

             return url;
        }


        private static WebViewFragment __newInstance(final WebViewFragment fragment, final FragmentManager manager,
                final String searchTerm, final String symbolType, int containerViewId) {

            return __newInstance(fragment, manager,searchTerm, symbolType, containerViewId, R.anim.slide_in_from_right, R.anim.slide_out_to_left, R.anim.slide_in_from_left, R.anim.slide_out_to_right);
        }
        private static void clearWebView(final FragmentManager manager) {
            final WebViewFragment fragment = (WebViewFragment) manager.findFragmentByTag(TAG_FRAGMENT_WEBVIEW);
            if (fragment != null && fragment instanceof WebViewFragment) {
                ((WebViewFragment)fragment).clearWebView();
            }
        }

        public static WebViewFragment newInstance(final FragmentManager manager, final String searchTerm, String symbolType) {
            clearWebView(manager);
            return __newInstance(new WebViewFragment(), manager, searchTerm, symbolType, R.id.fragment_container);
        }

        public static WebViewFragment newInstance(final FragmentManager manager, final String searchTerm, String symbolType, int containerViewId) {
            clearWebView(manager);
            return __newInstance(new WebViewFragment(), manager, searchTerm, symbolType, containerViewId);
        }

        public static WebViewFragment newInstanceNoBackPressed(final FragmentManager manager, final String searchTerm,  final String symbolType, int containerViewId) {
            WebViewFragment fragment =  __newInstance(new WebViewFragment(), manager, searchTerm, symbolType, containerViewId);
            fragment.setOnBackPressClearStack(false);
            return fragment;
        }

        public static WebViewFragment newInstanceNoBackPressed(final WebViewFragment fragment, final FragmentManager manager, final String searchTerm, final String symbolType, int containerViewId) {
            fragment.setOnBackPressClearStack(false);
            return __newInstance(fragment, manager, searchTerm, symbolType, containerViewId);
        }

        public static WebViewFragment newInstanceForSearch(final FragmentManager manager, final String searchTerm, String symbolType) {
            WebViewFragment fragment = __newInstance(new WebViewFragment(), manager, searchTerm, symbolType, R.id.fragment_container, R.anim.no_animation, R.anim.slide_out_to_right, R.anim.slide_in_from_right, R.anim.slide_out_to_right);
            return fragment;
        }

        @Override
        public void onResume() {
            super.onResume();
            final MainActivity activity = (MainActivity) getActivity();
            activity.updateActionBarTitle();
            activity.setBackPressListener(this);

            }
        public void clearWebView() {
            if (mWebview != null) {
                mWebview.removeAllViews();
                mWebview.destroy();
                mWebview = null;
            }
        }
        @Override
        public void onClick(View v) {

          getActivity().finish();
        }

        @SuppressWarnings("deprecation")
        @SuppressLint({
                "SetJavaScriptEnabled", "NewApi"
        })
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if (goingBack) {
                return null;
            }
            final MainActivity activity = (MainActivity) getActivity();

            activity.setBackPressListener(this);
            View view = inflater.inflate(R.layout.fragment_search, container, false);


            mWebview =  (WebView)view.findViewById(R.id.webview);
            progressBar = (LinearLayout) view.findViewById(R.id.loading);   
            mWebview.setVisibility(View.VISIBLE);

            progressBar.setVisibility(View.VISIBLE);

                mWebview.setWebViewClient(new MyWebViewClient(this, mWebview));
                mWebview.getSettings().setUseWideViewPort(true);

                mWebview.setBackgroundColor(0);
                mWebview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
                mWebview.getSettings().setAllowFileAccess(true);
                mWebview.getSettings().setDomStorageEnabled(true);
                mWebview.getSettings().setJavaScriptEnabled(true);

                mWebview.setScrollbarFadingEnabled(false);
                mWebview.getSettings().getLoadsImagesAutomatically();

                    android.webkit.CookieManager webCookieManager =
                        CookieManager.getInstance();
                    webCookieManager.setAcceptCookie(true);


                mWebview.setWebChromeClient(new WebChromeClient() {
                       @Override
                       public void onReceivedTitle(WebView view, String title) {
                          super.onReceivedTitle(view, title);

                          String serverError = "412";
                          if (title.contains(serverError)) {
                              view.stopLoading();
                              SearchResultsFragment.newInstance(getFragmentManager(), mSearchTerm);
                          }
                       }
                    });
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
                    mWebview.getSettings().setDisplayZoomControls(false);
                SharedPreferencesManager mgr = SharedPreferencesManager.getInstance();
                CookieStore cookieStore = mgr.getCookieStore();
                Cookie cookie = cookieStore.getCookies().get(0);
                String cookieString =  cookie.getName() + "=" + cookie.getValue() + "; domain=" + cookie.getDomain();
                CookieManager cookieMgr = CookieManager.getInstance();
                cookieMgr.setCookie(URL, cookieString);



                mWebview.loadUrl(URL);


            return view;
        }


        public class MyWebViewClient extends WebViewClient {


            public MyWebViewClient(WebViewFragment sWebViewFragment, WebView webview) {
                super();
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                view.setVisibility(View.VISIBLE);

            }

            @Override
            public void onPageFinished(WebView view, String url) {

                final Animation fade = new AlphaAnimation(0.0f, 1.0f);
                fade.setDuration(200);
                view.startAnimation(fade);

                view.setVisibility(View.VISIBLE);

                progressBar.setVisibility(View.GONE);

            }


            @Override
            public void onReceivedError( WebView view, int errorCode, String description, String failingUrl ) {
                Toast.makeText(view.getContext(), "Authentication Error", Toast.LENGTH_LONG).show();

                super.onReceivedError(view, errorCode, description, failingUrl);
            }

            @Override
            public void onLoadResource( WebView view, String url ){

            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                    return super.shouldOverrideUrlLoading(view, url);

            }

            @Override
            public void onReceivedHttpAuthRequest( WebView view, final HttpAuthHandler handler, final String host, final String realm ){

                    handler.proceed(USERNAME,PASSWORD);

        }


             @Override
            public void onReceivedSslError( WebView view, SslErrorHandler handler, SslError error ) {
                handler.proceed();
            }        
        }


    }

解决方案

If you replace this :

if (environmentApi.equalsIgnoreCase(NetworkUtils.Apis.ALPHA)) {

                    url = "https://cp.com/fwd/service/v1/?q="+mSearchTerm+"%20revenue&ui.theme=novadark&uuid="+getuuid+"&userAgent=android";



            } 

to be more dynamic say :

url = SharedPreferencesManager.getInstance().getXTRSAPEndPoint().replace("data/", "") + "fwd/service/v1/?q="+mSearchTerm+"%20revenue&ui.theme=novadark&uuid="+getuuid+"&userAgent=android";

and fix that cookie

String cookieString =  cookie.getName() + "=" + cookie.getValue() + "; domain=" + cookie.getDomain();
            to 
 String cookieString =  cookie.getName() + "=" + cookie.getValue() + "; domain=" + SharedPreferencesManager.getInstance().getXTRSAPEndPoint().replace("/data/", "").replace("https://", "");

It should work.