質問

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.

役に立ちましたか?

解決 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.

他のヒント

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);

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top