Здравствуйте! Я начинающий Android разработчик, очень надеюсь на вашу помощь!
Я разрабатываю приложение, вход в которое осуществляется через соц. сеть "Вконтакте". Вход и регистрацию реализовать удалось, теперь нужно сохранить информацию о пользователе в отдельном объекте, и вот здесь возникла проблема: когда я пытаюсь сохранить данные во внешний объект из перегруженного метода
public void onComplete(VKResponse response) объекта
VKRequestListener в конце операции внешний объект их просто не сохраняет (подозреваю, что он разрушается вместе с объектом
VKRequestListener), хотя в процессе выполнения можно отследить, что данные присваиваются и поля внешнего объекта изменяются.
Вот код класса, который отвечает за вызов VK Api:
import com.vk.sdk.api.VKApi;
import com.vk.sdk.api.VKApiConst;
import com.vk.sdk.api.VKError;
import com.vk.sdk.api.VKParameters;
import com.vk.sdk.api.VKRequest;
import com.vk.sdk.api.VKRequest.VKRequestListener;
import com.vk.sdk.api.VKResponse;
import com.vk.sdk.api.model.VKApiUserFull;
import com.vk.sdk.api.model.VKList;
import com.prosto.asus.goroda.Player;
public class ApiVkCall {
private VKRequest myRequest;
private Player playerInfo;
VKRequestListener mRequestListener = new VKRequestListener() {
@Override
public void onComplete(VKResponse response) {
if (((VKList<VKApiUserFull>) response.parsedModel).size() == 1) {
VKApiUserFull user = ((VKList<VKApiUserFull>) response.parsedModel).get(0);
getUserInfo(user.first_name, user.last_name, user.photo_200);
} else {
getUserFriends((VKList<VKApiUserFull>) response.parsedModel);
}
}
};
public ApiVkCall() {
this.myRequest = null;
this.playerInfo = new Player (null, null, null, 0, 0, 0, 0, 0);
};
public void setRequest(String textReq) {
this.myRequest = VKApi.users().get(VKParameters.from(VKApiConst.FIELDS, textReq));
myRequest.secure = false;
myRequest.useSystemLanguage = false;
}
public void processRequestIfRequired() {
VKRequest request = null;
if (this.myRequest != null) {
long requestId = this.myRequest.registerObject();
request = VKRequest.getRegisteredRequest(requestId);
if (request != null)
request.unregisterObject();
}
if (request == null) return;
myRequest = request;
request.executeWithListener(mRequestListener);
}
protected void getUserInfo(String first_name, String last_name, String photo_200) {
playerInfo.setName(first_name);
playerInfo.setLastName(last_name);
playerInfo.setAvatarUrl(photo_200);
}
protected void getUserFriends (VKList<VKApiUserFull> friendList) {
playerInfo.setFriendList(friendList);
}
}
Вот часть кода активности которая, в случае получения верного AccessToken, должна сохранить основные данные о пользователе:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
VKCallback<VKAccessToken> callback = new VKCallback<VKAccessToken>() {
@Override
public void onResult(VKAccessToken res) {
// User passed Authorization
//startTestActivity();
ApiVkCall newCall = new ApiVkCall();
//получить информацию об игроке
newCall.setRequest("photo_200");
newCall.processRequestIfRequired();
//получить список друзей игрока в ВК
newCall.setRequest("id,first_name,last_name,photo_200");
newCall.processRequestIfRequired();
}