这是创的历史表  我在历史表中加了一个username的字段
一运行  怎么就报错  报的是空指针错 /***
 *  创建History表
 * @param context
 */
public static boolean createBoQuHistory(Context context){

StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("create table if not exists history( ")
             .append(" _id integer primary KEY AUTOINCREMENT,")
             .append(" Articler_id INTEGER NOT NULL,")
             .append(" Articler_title NVARCHAR(250),")
             .append(" Articler_info text,")
             .append(" Articler_author NVARCHAR(250),")
             .append(" Articler_lei NVARCHAR(250),")
             .append(" Articler_img NVARCHAR(250),")
             .append(" Articler_time TIMESTAMP,")
             .append(" username text)");//这里是 增加字段的地方
try {
mySQLiteDataBase=context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
mySQLiteDataBase.beginTransaction();
mySQLiteDataBase.execSQL(stringBuffer.toString());
mySQLiteDataBase.setTransactionSuccessful();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}finally{
mySQLiteDataBase.endTransaction();//这里是报错的地方                           
mySQLiteDataBase.close();
}


}
这是报错信息
04-15 07:55:38.954: I/global(224): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
04-15 07:55:42.056: D/dalvikvm(224): GC freed 7082 objects / 639360 bytes in 155ms
04-15 07:55:42.695: I/com.reader.view.InforLayout(224): kind:1<FENLEIID:368>title:分类 
04-15 07:55:42.905: I/System.out(224): FENLEIID368
04-15 07:55:53.674: I/history.username(224): [email protected]
04-15 07:55:53.695: D/AndroidRuntime(224): Shutting down VM
04-15 07:55:53.695: W/dalvikvm(224): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-15 07:55:53.714: E/AndroidRuntime(224): Uncaught handler: thread main exiting due to uncaught exception
04-15 07:55:53.746: E/AndroidRuntime(224): java.lang.NullPointerException
04-15 07:55:53.746: E/AndroidRuntime(224):  at com.reader.tool.Mysqlite.createBoQuHistory(Mysqlite.java:58)
04-15 07:55:53.746: E/AndroidRuntime(224):  at com.reader.view.page.Infor$1.onItemClick(Infor.java:139)
04-15 07:55:53.746: E/AndroidRuntime(224):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-15 07:55:53.746: E/AndroidRuntime(224):  at android.widget.ListView.performItemClick(ListView.java:3285)
04-15 07:55:53.746: E/AndroidRuntime(224):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
04-15 07:55:53.746: E/AndroidRuntime(224):  at android.os.Handler.handleCallback(Handler.java:587)
04-15 07:55:53.746: E/AndroidRuntime(224):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-15 07:55:53.746: E/AndroidRuntime(224):  at android.os.Looper.loop(Looper.java:123)
04-15 07:55:53.746: E/AndroidRuntime(224):  at android.app.ActivityThread.main(ActivityThread.java:4363)
04-15 07:55:53.746: E/AndroidRuntime(224):  at java.lang.reflect.Method.invokeNative(Native Method)
04-15 07:55:53.746: E/AndroidRuntime(224):  at java.lang.reflect.Method.invoke(Method.java:521)
04-15 07:55:53.746: E/AndroidRuntime(224):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-15 07:55:53.746: E/AndroidRuntime(224):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-15 07:55:53.746: E/AndroidRuntime(224):  at dalvik.system.NativeStart.main(Native Method)
04-15 07:55:53.784: I/dalvikvm(224): threadid=7: reacting to signal 3
04-15 07:55:53.784: E/dalvikvm(224): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

解决方案 »

  1.   

    怀疑是 mySQLiteDataBase 是 null导致的
      

  2.   

    try {
      return true;
    } catch () {
      return false;
    } finally {
    }return让finally怎么执行呢?
      

  3.   

    首先进来还没有看楼主的问题,但这位兄弟的错误观点我要指出来。
    在try-catch中如果有return的语句,如果还包含finally的话,
    在返回前是还会执行这个语句块里的内容的,
    所以我们可以把例如关闭数据库连接等的语句放在finally中,
    确保方法执行完成后一定关闭数据库连接。
      

  4.   

    请问楼主没加username字段时是正确的吗?我见最后一行的错误是:04-15 07:55:53.784: E/dalvikvm(224): Unable to open stack trace file '/data/anr/traces.txt': Permission denied难道是你的Activity没有注册?
      

  5.   

    楼主,看上边的log说的是,stringbuffer创建的不够大。默认的构造函数创建出来的buffer是16个字符吧。
    将StringBuffer stringBuffer=new StringBuffer();
    改成StringBuffer stringBuffer=new StringBuffer(8000);
    试一下,看是否可以。
      

  6.   

    其中2行的代码位置换一下:
    /***
     * 创建History表
    * @param context
     */
     public static boolean createBoQuHistory(Context context){ StringBuffer stringBuffer=new StringBuffer();
     stringBuffer.append("create table if not exists history( ")
     .append(" _id integer primary KEY AUTOINCREMENT,")
     .append(" Articler_id INTEGER NOT NULL,")
     .append(" Articler_title NVARCHAR(250),")
     .append(" Articler_info text,")
     .append(" Articler_author NVARCHAR(250),")
     .append(" Articler_lei NVARCHAR(250),")
     .append(" Articler_img NVARCHAR(250),")
     .append(" Articler_time TIMESTAMP,")
     .append(" username text)");//这里是 增加字段的地方 
    try {
     mySQLiteDataBase=context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
     mySQLiteDataBase.beginTransaction();
     mySQLiteDataBase.execSQL(stringBuffer.toString()); 
    mySQLiteDataBase.setTransactionSuccessful();
    mySQLiteDataBase.endTransaction();//这里是报错的地方
    mySQLiteDataBase.close();
     return true;
     } catch (SQLException e) {
     e.printStackTrace();
     return false;
     }
     }
      

  7.   

    另外,没有看到你有定义mySQLiteDataBase的代码?
      

  8.   

    Mysqlite.java这个文件的全部代码贴上来