发送令牌Android之后,URL不会重定向到主页吗?

时间:2020-02-09 15:46:16

标签: java android webview retrofit2 token

我的登录活动正常,成功登录后,我获得令牌,并通过 SharedPreferences 将其发送到Webview片段并将其传递给 WebviewClient ,但它没有不会重定向到 webview 内网站的主页URL ,而是重定向到 Webview 内网站的登录页面URL。我没有找不到有用的解决方案。 预先感谢

我的代码:

登录活动

btnSignin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           fetchToken();
        }
    });
}

private void fetchToken() {
    String email = txtUsername.getText().toString();
    String password = txtPassword.getText().toString();
    UserRequest userRequest = new UserRequest(email, password);
    RxUtil.asyncConsumer(service.getToken(userRequest), new Consumer<TokenResponse>() {
        @Override
        public void accept(TokenResponse response) throws Exception {
            Log.d("ResponseToken", "" + response.getSuccess().getToken());
            if (response.getSuccess() != null) {
                String token = response.getSuccess().getToken();
                setKeyToken(token);
                Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                startActivity(intent);
            }else {
                Toast.makeText(LoginActivity.this, "Something went wrong please try again", Toast.LENGTH_LONG).show();
            }
        }
    });
}

private void setKeyToken(String token) {
    preferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(KEY_TOKEN, token);
    editor.apply();
}

public String getKeyToken() {
    preferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    return preferences.getString(KEY_TOKEN, "");
}

主要活动中的网页片段

public class WebFragment extends Fragment {
    private WebView webView;
    private ProgressBar progressBar;
    private String url = "some_url";
    private String token;
    private SharedPreferences preferences;

    public WebFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_web, container, false);
        webView = view.findViewById(R.id.web_view);
        progressBar = view.findViewById(R.id.progress_bar);
        preferences = getActivity().getSharedPreferences(LoginActivity.SHARED_PREFS, Context.MODE_PRIVATE);
        initWebView(url);

        return view;
    }

    private void initWebView(String url) {
        webView.loadUrl(url);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebClient());
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        webView.getSettings().setAppCacheEnabled(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setSupportMultipleWindows(true);
        webView.getSettings().setUseWideViewPort(true);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
    }

    public class WebClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            progressBar.setVisibility(View.VISIBLE);
            super.onPageStarted(view, url, favicon);
        }

        @Nullable
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            try {
                String token = preferences.getString(LoginActivity.KEY_TOKEN, "DEFAULT");
                Log.d("Arg", "" + token);
                OkHttpClient okHttpClient = new OkHttpClient();
                Request request = new Request.Builder().url(url).addHeader("Authorization", "Bearer " + token).build();

                Response response = okHttpClient.newCall(request).execute();

                return new WebResourceResponse(response.header("text/html", response.body().contentType().type()),
                        response.header("content-encoding", "utf-8"),response.body().byteStream());


            } catch (ProtocolException e) {
                //return null to tell WebView we failed to fetch it WebView should try again.
                return null;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            progressBar.setVisibility(View.GONE);
            super.onPageFinished(view, url);
        }
    }

0 个答案:

没有答案