2011-12-09 49 views
1

按後退按鈕在屏幕截圖1我有2個按鈕和雙給場變化監聽器都這樣。當我按下按鈕「A」它推說屏蔽2我在那裏所使用的每個按下相應的屏幕一個keywordFilter搜索從SQLite數據庫的話,是listed.These一切都是完美的,當我運行應用程序,但是當我按下後退(或前一個鍵),然後按下按鈕「A」從屏幕截圖1再次我不找到任何結果database.same的事情發生在按鈕b也。什麼cud b pblm幫助。 感謝ü提前 這麼多下面是按鈕後,叫「一」被點擊找不到數據庫列表黑莓

import net.rim.device.api.ui.*; 
import net.rim.device.api.io.*; 
import net.rim.device.api.ui.component.*; 
import net.rim.device.api.system.*; 
import java.util.*; 

import net.rim.device.api.database.Database; 
import net.rim.device.api.database.DatabaseFactory; 
import net.rim.device.api.database.Row; 
import net.rim.device.api.database.Statement; 


public final class KeywordFilter 
{ 
    private KeywordFilterField _keywordFilterField;  
    private WordList _wordList; 
    private Vector _words; 


    public KeywordFilter() 
    {  

     _words = getDataFromDatabase(); 

     if(_words != null) 
     { 

      _wordList = new WordList(_words);   


      _keywordFilterField = new KeywordFilterField();     
      _keywordFilterField.setSourceList(_wordList, _wordList);  


      CustomKeywordField customSearchField = new CustomKeywordField(); 
      _keywordFilterField.setKeywordField(customSearchField);      


      KeywordFilterScreen screen = new KeywordFilterScreen(this); 


      screen.setTitle(_keywordFilterField.getKeywordField());    


      screen.add(_keywordFilterField); 
      UiApplication ui = UiApplication.getUiApplication(); 

      ui.pushScreen(screen); 

     } 
     else 
     { 
      UiApplication.getUiApplication().invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        Dialog.alert("Error reading data file."); 
        System.exit(0); 
       } 
      }); 
     }  
    } 


    KeywordFilterField getKeywordFilterField() 
    { 
     return _keywordFilterField; 
    } 


    private Vector getDataFromDatabase() 
    { 
     Vector words = new Vector(); 
     Database d; 
      for(;;) 
      { 
       try 
       { 
        URI myURI=URI.create("file:///SDCard/Databases/MyTestDatabase.db"); 
        d=DatabaseFactory.open(myURI); 
        Statement st=d.createStatement("SELECT eng,mal FROM Malayalam m,English e where e.Ecode=m.Mcode"); 
        st.prepare(); 
        net.rim.device.api.database.Cursor c=st.getCursor(); 
        Row r; 
        while(c.next()) 
        { 
        r=c.getRow(); 
        String w=r.getString(0); 
        String meaning=r.getString(1); 
        words.addElement(new Word(w,meaning)); 
        }} 
        catch (Exception e) 
     {   
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     }      


      return words;   
     } 

    } 


    void addElementToList(Word w) 
    {  
     _wordList.addElement(w); 
     _keywordFilterField.updateList();  
    } 


    final static class CustomKeywordField extends BasicEditField 
    { 

     CustomKeywordField() 
     { 

      super(USE_ALL_WIDTH|NON_FOCUSABLE|NO_LEARNING|NO_NEWLINE); 

      setLabel("Search: "); 
     } 


     protected boolean keyChar(char ch, int status, int time) 
     { 
      switch(ch) 
      { 
       case Characters.ESCAPE: 

        if(super.getTextLength() > 0) 
        { 
         setText("");       
         return true; 
        } 

      }     
      return super.keyChar(ch, status, time); 
     }      


     protected void paint(Graphics graphics) 
     {    
      super.paint(graphics); 


      getFocusRect(new XYRect()); 
      drawFocus(graphics, true);       
     } 
    } 
} 
import net.rim.device.api.ui.*; 
import net.rim.device.api.ui.component.*; 
import net.rim.device.api.ui.container.*; 
import net.rim.device.api.system.*; 

final class KeywordFilterScreen extends MainScreen 
{ 
    private KeywordFilter _app; 
    private KeywordFilterField _keywordFilterField;  

    public KeywordFilterScreen(KeywordFilter app) 
    { 

     _app = app; 


     _keywordFilterField = _app.getKeywordFilterField(); 



    } 


    protected boolean keyChar(char key, int status, int time) 
    { 
     if (key == Characters.ENTER) 
     { 
      displayInfoScreen(); 
      return true; 
     }    
     return super.keyChar(key, status, time); 
    }  


    public boolean invokeAction(int action) 
    {   
     switch(action) 
     { 
      case ACTION_INVOKE: 

       displayInfoScreen();     
       return true; 
     }  
     return super.invokeAction(action); 
    } 


    private void displayInfoScreen() 
    { 

     Word w = (Word)_keywordFilterField.getSelectedElement(); 
     if(w != null) 
     {    
      InfoScreen infoScreen = new InfoScreen(w); 
      UiApplication ui = UiApplication.getUiApplication(); 
      ui.pushScreen(infoScreen); 
      ui.popScreen(this); 

     } 
    } 




    private final static class InfoScreen extends MainScreen 
    { 

     InfoScreen(Word w) 
     { 

      setTitle(w.toString());    
      BasicEditField popField = new BasicEditField(":",w.getMeaning(),20,Field.NON_FOCUSABLE); 
      add(popField); 




     }   
    }  
} 
public class Word 
{ 
    private String _word; 
    private String _meaning; 



    public Word(String word, String meaning) 
    { 
     _word = word; 
     _meaning = meaning; 

    } 

    String getMeaning() 
    { 
     return _meaning; 
    } 




    public String toString() 
    { 
     return _word; 
    } 
} 
import net.rim.device.api.ui.component .*; 
import net.rim.device.api.collection.util.*; 
import net.rim.device.api.util.*; 
import java.util.*; 

public class WordList extends SortedReadableList implements KeywordProvider 
{ 

    public WordList(Vector words) 
    { 
     super(new WordListComparator());  

     loadFrom(words.elements());  
    } 


    void addElement(Object element) 
    { 
     doAdd(element);   
    }  

    public String[] getKeywords(Object element) 
    {   
     if(element instanceof Word) 
     {    
      return StringUtilities.stringToWords(element.toString()); 
     }   
     return null; 
    } 


    final static class WordListComparator implements Comparator 
    { 

     public int compare(Object o1, Object o2) 
     { 
      if (o1 == null || o2 == null) 
       throw new IllegalArgumentException("Cannot compare null words"); 

      return o1.toString().compareTo(o2.toString()); 
     }   
    }  
} 
+3

沒有看到你的代碼之前在私人矢量getDataFromDatabase()方法訪問數據庫之後它可能是許多事情之一。 – jprofitt

+0

抱歉,我的錯誤,我沒有關閉數據庫連接後,現在打開它的罰款 – j2me

+0

很高興聽到你明白了。作爲對其他人的幫助,您可能希望添加該答案作爲答案,並接受它以防將來遇到此問題。 – jprofitt

回答

1

添加st.close();和d.close()剛剛閉幕的try塊