Пишу месседжер для вк, используя стандартный 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;
}
}