2014-05-23 41 views
-1

我已经尝试写入数据库并读取它们并将它们加载到ArrayList,然后列表中的元素应该被添加到AutoCompleteTextView,但它似乎显示为NullPointerException插入数据库和读取数据库后出现空指针异常

这是代码。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    tweetPost = new Tweet(); 
     setIssueTypeToDatabase("Accident"); 
     setIssueTypeToDatabase("Fire"); 
     setIssueTypeToDatabase("Local Utility Problem"); 
     setIssueTypeToDatabase("Theft"); 
     setIssueTypeToDatabase("Technological Problem"); 


    postBox = (EditText) findViewById(R.id.post); 
    log.debug(postBox); 
    issue = (AutoCompleteTextView) findViewById(R.id.autocomplete_issue); 
    log.debug(issue); 
    setIssueTypeFromDatabaseToList(); 
    adapterA = new ArrayAdapter(this, 
      android.R.layout.simple_list_item_1, IssueTypeList); 

    issue.setAdapter(adapterA); 
    } 


private void setIssueTypeToDatabase(String issue) { 
    SQLiteDatabase db = issueTypeDatabase.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(IssueTypeDatabase.C_Issue, issue); 
    db.insertOrThrow(IssueTypeDatabase.TABLE, null, values); 

} 

private void setIssueTypeFromDatabaseToList() { 
    SQLiteDatabase db = issueTypeDatabase.getReadableDatabase(); 
    Cursor cursor = db.query(IssueTypeDatabase.TABLE, FROM, null, null, null, null, 
      ORDER_BY); 
    startManagingCursor(cursor); 
    showEvents(cursor); 
} 

private void showEvents(Cursor cursor) { 
    log.debug("showEvents()"); 
    // Stuff them all into a big string 
    setContentView(R.layout.database); 
    while (cursor.moveToNext()) { 
     // Could use getColumnIndexOrThrow() to get indexes 
     issueTypesFound = cursor.getString(1); 

     IssueTypeList.add(issueTypesFound); 


    } 
    cursor.close(); 
} 


    public class IssueTypeDatabase extends SQLiteOpenHelper{ 


    // Static Final Variable database meta information 

    static final String DATABASE = "IssueType.db"; 
    static final int VERSION =4; 
    public static final String TABLE = "IssueTypeTable"; 
    static final String TABLE_DEPT = "Issue_Dept"; 

    public static final String C_ID = "_id"; 
    public static final String C_Issue = "issue"; 

    private static final Logger log = Logger.getLogger(IssueTypeDatabase.class); 
    // Override constructor 
    public IssueTypeDatabase(Context context) { 

     super(context, DATABASE, null, VERSION); 
     log.debug("IssueTypeDatabse()"); 

    } 

    // Override onCreate method 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     log.debug("onCreate()"); 
     db.execSQL("CREATE TABLE " + TABLE + " (" + C_ID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + C_Issue + " TEXT"+");"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     log.debug("onUpgrade()>>SQLiteDatabase={}",DATABASE); 
     // Drop old version table 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE); 

     // Create New Version table 
     onCreate(db); 
    } 
} 

和日志:

Log

+0

我在这里也看到,你有一个startManagingCursor和一个cursor.close()在同一个游标上,这些不应该一起使用,我不认为。 –

+0

Thanx,我删除了cursor.close()并将其修改了一下,它工作:) – KKGanguly

回答

1

我终于发现了什么是错误,cursor.close()是造成问题,再次我又愚蠢的错误,我设置布局在我的showEvents()方法中,导致屏幕快速更改。 ,所以删除cursor.close()和setContentView(R.layout.database)做了诀窍。

相关问题