Question

I am trying to add a list in a VerticalFieldManager and then that manager to another VerticalFieldManager. I am using it in custom tabs.First time when application starts it runs fine but when I switch to another tab and return to same it gives IllegalStateException.

I tried it in many ways but not getting what is causing the exception in adding that VerticalFieldManager.

I am using the code :

//HEADER
_bitmap = EncodedImage.getEncodedImageResource("Friends.png");
friendsBmp = new BitmapField(Constants.sizePic(_bitmap, _bitmap.getHeight(), _bitmap.getWidth()));

//add(WebBitmapField.getUrlHFM());
SCREEN_FLAG = Constants.FRIENDS_FLAG ;

//FRIENDS' UPPER TAB    
friendsTabHFM =new HorizontalFieldManager();

Bitmap ConnectedUser_normal_Bmp =Constants.sizePic(EncodedImage.
        getEncodedImageResource("connected_user_normal.png"),40, Display.getWidth()/2); //Bitmap.getBitmapResource("connected_user_normal.png");
Bitmap search_normal_Bmp = Constants.sizePic(EncodedImage.
        getEncodedImageResource("search_normal.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("search_normal.png");

Bitmap ConnectedUser_tap_Bmp = Constants.sizePic(EncodedImage.
        getEncodedImageResource("connected_user_tap.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("connected_user_tap.png");
Bitmap search_tap_Bmp = Constants.sizePic(EncodedImage.
        getEncodedImageResource("search_tap.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("search_tap.png");

connectedUsersTab= new CustomButtonField(ConnectedUser_normal_Bmp.getWidth(), "", ConnectedUser_normal_Bmp, ConnectedUser_tap_Bmp, ButtonField.FIELD_HCENTER );
connectedUsersTab.setChangeListener(this);

searchTab = new CustomButtonField(search_normal_Bmp.getWidth(), "", search_normal_Bmp, search_tap_Bmp, ButtonField.FIELD_RIGHT);
searchTab.setChangeListener(this);


friendsTabHFM.add(connectedUsersTab);
friendsTabHFM.add(searchTab);

if(Constants.isGetConnectedFriends){
    Constants.isGetConnectedFriends =false ;
    if(friendsVFM.getFieldCount()!= 0){
        friendsVFM.deleteAll();
    }
    //GET CONNECTED FRIENDS WEB SERVICE CALL
    GetConnectedFriendsInterMediater getConnectedFriendsInterMediater = new GetConnectedFriendsInterMediater(WebServiceDetails.METHOD_GET_CONNECTED_USER, Jxa.loginUserName);
    PleaseWaitPopupScreen.showScreenAndWait(getConnectedFriendsInterMediater, Constants.PLEASE_WAIT_TEXT);

}else if(Constants.isGetUserByUsername){
    //Constants.isGetUserByUsername = false ;

    GetUserByUsernameIntermediator getUserListIntermediator=new GetUserByUsernameIntermediator(Jxa.loginUserName ,SearchUserScreen.userName);
    PleaseWaitPopupScreen.showScreenAndWait(getUserListIntermediator, Constants.PLEASE_WAIT_TEXT);

}else if(Constants.isGetAllUser){
    Constants.isGetAllUser = false ;

    GetAllUserListIntermediator getAllUserListIntermediator=new GetAllUserListIntermediator(WebServiceDetails.METHOD_FIND_USERS,SearchUserScreen._ageRange,SearchUserScreen._status,SearchUserScreen._religion,String.valueOf(SearchUserScreen._page) ,Jxa.loginUserName);
    PleaseWaitPopupScreen.showScreenAndWait(getAllUserListIntermediator, Constants.PLEASE_WAIT_TEXT);
}


if(_mainScreenVFM.getFieldCount()!=0){
    _mainScreenVFM.deleteAll();
}
_mainScreenVFM.add(friendsTabHFM);
_mainScreenVFM.add(friendsVFM);

These code is for a tab in which two sub-tabs are there.For sub tabs it is running fine but for not for main tab.

One more scenario is there,when GetConnectedFriendsInterMediater is called in that I am adding the list in friendsVFM which creating the exception. Code for that is:

GetConnectedFriendsWebService getFriendsWebService = new GetConnectedFriendsWebService(method ,userName);
    Vector friendsVecList= getFriendsWebService.getFriends();

Constants.connectedUsersVector = friendsVecList ;

synchronized (UiApplication.getEventLock()) {
    if(TabControlScreen.friendsVFM.getFieldCount()!=0){
        TabControlScreen.friendsVFM.deleteAll();
    }
    TabControlScreen.friendsVFM.add(ConnectedFriends.getInstance(KingdomConnectMain.buddyList)); //HERE LIST IS ADDED
}

I have resolved the problem ,when I was switching the tab ,I was not creating new instance for friendsVFM and using the same instance which was causing the exception at that time.Now ,same exception is thrown when I am trying to add buddyList in _listVFM . I know it is due to adding the buddyList again which is already added.Is there any solution so that I can add the list without exception. Code for that:

//CREATING SINGLETON REFERENCE OF THE BUDDYLIST SCREEN

public static ConnectedFriends getInstance(BuddyListField buddyListField){
        if(connectedFriends==null){
            connectedFriends = new ConnectedFriends(buddyListField);
        }
        return connectedFriends;
    }

public ConnectedFriends(BuddyListField buddyListField) {
        if(_listVFM!=null){
            _listVFM.deleteAll();
        }
        _listVFM = new VerticalFieldManager();

        _listVFM.add(buddyListField);//HERE IS EXCEPTION ,BUT WANT TO ADD THE LIST //SECOND TIME TOO
}

When I am returning from another tab to sam tab it throws exception or in other words I am not able to add the list.

Was it helpful?

Solution 2

I solved it by using getManager() on buddyList and removing that.Than again I added it as per requirement and it worked.Code for this :

if(ConnectedFriends.getInstance(KingdomConnectMain.buddyList).getManager()!= null){
            ConnectedFriends.getInstance(KingdomConnectMain.buddyList).getManager().delete(ConnectedFriends.getInstance(KingdomConnectMain.buddyList));
            }
            TabControlScreen.friendsVFM.add(ConnectedFriends.getInstance(KingdomConnectMain.buddyList));

This code is used while calling GetConnectedFriendsWebService in the second part of codes.

OTHER TIPS

Illegal state exception occurs when you're trying to add fields twice as suggested by Signare also. I guess you should try this first: friendsVFM.getManager().delete(friendsVFM);

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top