Всем привет!
Написал код на яве, чтобы получать имя пользователя Вконтакте с заданным uid.
String request = "https://api.vk.com/method/users.get?uids=" + 1 + "&fields=first_name,last_name&access_token=" + accessToken; //для Павла Дурова
try {
URL url = new URL(request);
HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
BufferedReader inReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = inReader.readLine()) != null) {
int beginIndex = inputLine.indexOf('[');
int endIndex = inputLine.indexOf(']');
inputLine = inputLine.substring(beginIndex + 1, endIndex);
VKPerson vkPerson = new Gson().fromJson(inputLine, VKPerson.class);
System.out.println(vkPerson);
}
inReader.close();
} catch (Exception e) {
e.printStackTrace(System.err);
}
Класс VKPerson для GSON:
public class VKPerson {
private Integer uid;
private String first_name;
private String last_name;
public Integer getUid () {return uid;}
public String getFirst_name () {return first_name;}
public String getLast_name () {return last_name;}
public void setUid (Integer uid) {this.uid = uid;}
public void setFirst_name (String first_name) {this.first_name = first_name;}
public void setLast_name (String last_name) {this.last_name = last_name;}
public String toString () {
//TODO: charset conversion
return String.format("uid: %d; first_name: %s; last_name: %s", uid, first_name, last_name);
}
}
В итоге строчка-ответ выглядит так
{«response»:[{«uid»:1,«first_name»:"Павел",«last_name»:"Дуров"}]}
а VKPerson печает
uid: 1; first_name: Павел; last_name: Дуров
Знаю, что надо сконвертировать данные из
cp-1251utf-8, в которой ВК отдает русские имена. Но видимо это уже надо делать после работы Gson().fromJson. Но тогда из каждого символа изначальной строчки получается два байта в строках класса VKPerson.