02-18 07:41:43.549: ERROR/AndroidRuntime(513): java.lang.NullPointerException02-18 07:41:43.549: ERROR/AndroidRuntime(513): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)02-18 07:41:43.549: ERROR/AndroidRuntime(513): at com.nj.dao.UsersSerive.getUsersByLoginI(UsersSerive.java:25)02-18 07:41:43.549: ERROR/AndroidRuntime(513): at com.nj.dao.UsersDaoImpl.getUsersByLoginId(UsersDaoImpl.java:19)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at com.nj.dao.One$1.onClick(One.java:34)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at android.view.View.performClick(View.java:2408)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at android.view.View$PerformClick.run(View.java:8816)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at android.os.Handler.handleCallback(Handler.java:587)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at android.os.Handler.dispatchMessage(Handler.java:92)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at android.os.Looper.loop(Looper.java:123)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at android.app.ActivityThread.main(ActivityThread.java:4627)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at java.lang.reflect.Method.invokeNative(Native Method)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at java.lang.reflect.Method.invoke(Method.java:521)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)02-18 07:41:43.549: ERROR/AndroidRuntime(513):     at dalvik.system.NativeStart.main(Native Method)
这个是在运行到SQLiteDatabase sqlite=dbhelper.getWritableDatabase();这一步所出的错 求指导啊
下面的是我DBHelper的代码import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper{
private static final String name="mydata";
private static final int version=1; public DBHelper(Context context) {
super(context, name, null, version);
// TODO Auto-generated constructor stub
} @Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table if not exists users(id integer primary key autoincrement,loginId varchar(50),password varchar(50))");
db.execSQL("insert into users(loginId,password) values('123','123')");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("drop table if exists users");
onCreate(db);
}
}

解决方案 »

  1.   


    //实例化你的dbhelper类
    DBHelper dbhelper=new DBHelper(activity名字.this);
    sqlite=dbhelper.getWritableDatabase();
      

  2.   


    //实例化你的dbhelper类
    DBHelper dbhelper=new DBHelper(activity名字.this);
    SQLiteDatabase sqlite=dbhelper.getWritableDatabase();
      

  3.   

    我的serive的代码如下
    public class UsersSerive {
    private DBHelper dbhelper;
    public UsersSerive(Context context){
    dbhelper=new DBHelper(context);
    }

    //保存
    public void save(Users user){
    SQLiteDatabase sqlite=dbhelper.getWritableDatabase();
    sqlite.execSQL("insert into users(loginid,password) values(?,?)",new Object[]{user.getLoginId(),user.getPassword()});
    }

    //根据用户名查找
    public Users getUsersByLoginId(String loginId){
    Log.e("userserive4", loginId);
    SQLiteDatabase sqlite=dbhelper.getWritableDatabase();
    Log.e("userserive", loginId);
    Cursor cursor=sqlite.rawQuery("select * from users where loginId=?", new String[]{loginId});
    Log.e("userserive2", loginId);
    if(cursor.moveToNext()){
    Users user=new Users();
    Log.e("userserive3", loginId);
    user.setId(cursor.getInt(0));
    user.setLoginId(cursor.getString(1));
    user.setPassword(cursor.getString(2));
    return user;
    }
    return null;
    }
    }
    传的就是一个context啊 这里没有activity
      

  4.   

    dbhelper是空的呗,new DBHelper时候看看有没有异常
    最好先初始化一下private DBHelper dbhelper = null;
      

  5.   

    加trace看看吧。UsersSerive.java:25
    这是哪句啊?
      

  6.   

    下面我贴出来我DBHelper和UsersSerive和UsersDaoImpl的代码 各位大大看看哦
      

  7.   

    DBHelper和UsersSerive代码都在上面 下面给出UsersDaoImpl的代码
    package com.nj.dao;import android.test.AndroidTestCase;
    import android.util.Log;import com.nj.entity.Users;public class UsersDaoImpl extends AndroidTestCase {
    public void save(Users user){
    UsersSerive userSerive=new UsersSerive(this.getContext());
    userSerive.save(user);
    }

    public Users getUsersByLoginId(String loginId){
    Log.e("userDaoImpl", loginId);
    UsersSerive userSerive=new UsersSerive(this.getContext());
    Users user=new Users();
    Log.e("userDaoImpl2", loginId);
    user=userSerive.getUsersByLoginId(loginId);
    return user;
    }
    }
      

  8.   

    上面的报错的UsersSerive.java:25 是这一行:SQLiteDatabase sqlite=dbhelper.getWritableDatabase();
    UsersDaoImpl.java:19是:user=userSerive.getUsersByLoginId(loginId);
    One.java:34是:Users user=userDao.getUsersByLoginId(loginId.getText().toString());归根结底都是dbhelper.getWritableDatabase错了,返回的应该是空的 求指教
      

  9.   

    [code=Jav]dbhelper= new DBHelperUtil(context);db = dbhelper.getWritableDatabase();[/code]
      

  10.   

    [code=Jav]dbhelper= new DBHelperUtil(context); db = dbhelper.getWritableDatabase();
    [/code]
      

  11.   

    呃 我在重构方法时实例化了呀
    private DBHelper dbhelper=null;
    public UsersSerive(Context context){
    dbhelper=new DBHelper(context);
    }
      

  12.   

    请问解决了没?我也遇到了dbhelper不是空,但是db = dbhelper.getWritableDatabase()这个时候就报空指针异常,db是null;