@max_vr

Не могу превратить url в VKAccessToken?

Пишу месседжер для вк, используя стандартный vk sdk. Есть такой кусок кода:
String url = "https://oauth.vk.com/blank.html#access_token=https://oauth.vk.com/blank.html#access_token=af97823a79fe195e120c9d0c0190ce9b373e7d93fb3f2b2abc9066e361fbcaecdd9e761d****f0e18095&expires_in=0&user_id=****&email=****@gmail.com"
        VKAccessToken t = VKAccessToken.tokenFromUrlString(url);
        t.save();

(Личные данные закрыл звёздочками)
В нём из url нужно получить accessToken, после чего сохранить. Проблема в том, что t по неизвестным причинам так и остаётся null, из-за чего программа крашится на методе save(). На всякий случай, выкладываю несколько методов из VK SDK:
public static VKAccessToken tokenFromUrlString(String urlString) {
        if (urlString == null)
            return null;
        Map<String, String> parameters = VKUtil.explodeQueryString(urlString);
        return tokenFromParameters(parameters);

 public static Map<String, String> explodeQueryString(@Nullable String queryString) {
        if (queryString == null) {
            return null;
        }
        String[] keyValuePairs = queryString.split("&");
        HashMap<String, String> parameters = new HashMap<>(keyValuePairs.length);

        for (String keyValueString : keyValuePairs) {
            String[] keyValueArray = keyValueString.split("=");
            parameters.put(keyValueArray[0], keyValueArray[1]);
        }
        return parameters;
    }

 public static VKAccessToken tokenFromParameters(@Nullable Map<String, String> parameters) {
        if (parameters == null || parameters.size() == 0) {
            return null;
        }
        VKAccessToken token = new VKAccessToken();
        try {
            token.accessToken = parameters.get(ACCESS_TOKEN);
            token.userId = parameters.get(USER_ID);
            token.secret = parameters.get(SECRET);
            token.email = parameters.get(EMAIL);
            token.httpsRequired = false;
            if (parameters.get(EXPIRES_IN) != null) { token.expiresIn = Integer.parseInt(parameters.get(EXPIRES_IN)); }

            String scope = parameters.get(SCOPE);
            if (scope != null) {
                HashMap<String, Boolean> scopeMap = new HashMap<>();
                for (String s : scope.split(",")) {
                    scopeMap.put(s, true);
                }
                token.scope = scopeMap;
            }

            if (parameters.containsKey(HTTPS_REQUIRED)) {
                token.httpsRequired = parameters.get(HTTPS_REQUIRED).equals("1");
            } else if (token.secret == null) {
                token.httpsRequired = true;
            }

            if (parameters.containsKey(CREATED)) {
                token.created = Long.parseLong(parameters.get(CREATED));
            } else {
                token.created = System.currentTimeMillis();
            }

            return token.accessToken != null ? token : null;
        } catch (Exception e) {
            return null;
        }
    }
  • Вопрос задан
  • 231 просмотр
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
У вас вообще не корректный URL, не знаю, откуда его берете, вот так будет работать:

https://oauth.vk.com/blank.html#access_token=af97823a79fe195e120c9d0c0190ce9b373e7d93fb3f2b2abc9066e361fbcaecdd9e761d****f0e18095&expires_in=0&user_id=****&email=****@gmail.com
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы