@Sharombolla

Как сохранить данные, полученные с помощью VK SDK в отдельный объект?

Здравствуйте! Я начинающий 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();
            }
  • Вопрос задан
  • 1044 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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