libgdx robovm дает сбой в потоке извлечения с ненативными кадрами в стеке вызовов

1

Я был отключен и пытался устранить эту катастрофу уже несколько недель, но я еще не нашел проблему. Когда я запускаю следующую функцию "GetAchievementsInformation()" в моей игре Libgdx, приложение вылетает с "не может отсоединить поток, если в стеке вызовов есть не собственные фреймы",

Я здесь что-то не так? Большинство моих других запросов в facebook выполняются просто отлично (у меня есть вторая, которая дает ту же ошибку)

public FBRequest GetAchievementsRequest() 
{
    return new FBRequest(FBSession.getActiveSession(),"/"+ APP_ID + "/achievements", null,"GET");
}

FBRequestHandler GetAchievementsRequestHandler()
{
    return new FBRequestHandler()
    {

        @Override
        public void invoke(FBRequestConnection connection, NSObject data, NSError error) 
        {
            if (error != null) 
            {
                Gdx.app.log("error", error.toString());
                logout();
                return;
            }

            JSONArray achievements_data;
            try {
                achievements_data = NSObjectToJSONObject(data).getJSONArray("data");

                for(int i=0;i<achievements_data.length();i++)
                {
                    JSONObject achievement_data = achievements_data.getJSONObject(i);
                    JSONObject pointdata =  achievement_data.getJSONObject("data");
                    String points_data = pointdata.get("points").toString();
                    int score = Integer.parseInt(points_data);
                    String url = achievement_data.get("url").toString();
                    JSONArray list = achievement_data.getJSONArray("image");
                    String image_url = list.getJSONObject(0).get("url").toString();
                    achievementManager.AddInformationToAchievement(url, score,image_url);
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Gdx.app.log("request", "get achieved achievements");
            GetAchievedAchievementsRequest().start(GetAchievedAchievementRequestHandler());
        }

    };
}

public FBRequest GetAchievedAchievementsRequest() 
{
    return new FBRequest(FBSession.getActiveSession(),"/me/achievements", null, "GET");
}

FBRequestHandler GetAchievedAchievementRequestHandler()
{
    return new FBRequestHandler()
    {

        @Override
        public void invoke(FBRequestConnection connection, NSObject data,NSError error) 
        {
            if (error != null) 
            {
                Gdx.app.log("error", error.toString());
                logout();
                return;
            }
            JSONArray achievements_data;
            try 
            {
                achievements_data = NSObjectToJSONObject(data).getJSONArray("data");                
                for(int i=0;i<achievements_data.length();i++)
                {
                    JSONObject achievement_data =  achievements_data.getJSONObject(i).getJSONObject("data");
                    JSONObject achievement_sub_data = achievement_data.getJSONObject("achievement");
                    String url = achievement_sub_data.get("url").toString();
                    achievementManager.UnlockedAchievement(url);
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            achievementManager.SetupAchievementsFinished();     //finished loading after this
        }
    };
}

public void GetAchievementInformation()
{
    Gdx.app.log("request", "Getting achievement information");
    GetAchievementsRequest().start(GetAchievementsRequestHandler());
}

JSONObject NSObjectToJSONObject(NSObject object)
{
    JSONObject json = null;
    String jsonString64 = NSJSONSerialization.createJSONData(object, NSJSONWritingOptions.PrettyPrinted).toBase64EncodedString(NSDataBase64EncodingOptions.None);
    String jsonString = Base64Coder.decodeString(jsonString64);
    Gdx.app.log("json", "to json:" + jsonString);

    try {
        json = new JSONObject(jsonString);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return json;
}
  • 0
    На какой строчке происходит эта ошибка? Это случается каждый раз?
  • 1
    Так как у меня довольно медленный macbook, я не могу запустить отладчик, потому что он отключается перед каждым подключением. Используя строки отладки, мне удалось обнаружить, что проблема заключается в: GetAchievementsRequest (). Start (GetAchievementsRequestHandler ()); Забавно, что когда я выписывал функции, проблема возникла не в этом месте, а по более позднему запросу. Я буду расследовать дальше и обновлю вопрос / ответ, если выясню, что было не так. Это может быть просто случайно, хотя.
Показать ещё 1 комментарий
Теги:
libgdx
facebook
robovm

1 ответ

0
Лучший ответ

Это утечка памяти, исправленная добавлением: connection.dispose();

Я не уверен, почему это не проблема с другими моими запросами. Но здесь это вызвало крах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню