URL не перенаправляет на домашнюю страницу после отправки токена android? - PullRequest
1 голос
/ 09 февраля 2020

У меня есть вход в систему, который работает нормально, после успешного входа в систему я получаю токен, который отправляю на фрагмент веб-просмотра по SharedPreferences и передаю его WebviewClient , но это не так перенаправить на URL-адрес домашней страницы сайта, который находится внутри webview , перенаправить на URL-адрес страницы входа в систему внутри Webview . Я не нашел полезного решения , Заранее спасибо

Мой код:

Вход в систему

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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...