主要活动:
private Button btnSubmit;
private DataSource mDataSource;
private Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText first_name = (EditText) findViewById(R.id.first_name);
final Spinner relation = (Spinner) findViewById(R.id.relation);
final EditText address = (EditText) findViewById(R.id.address);
Button mSubmitButton = (Button) findViewById(R.id.btnSubmit);
relation.setOnItemSelectedListener(new CustomOnItemSelectedListener());
mSubmitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String fName = first_name.getText().toString();
String re_lation = (String) relation.getSelectedItem();
String add_ress = address.getText().toString();
if ((fName.length() <=0) || (re_lation.length()<=0) || (add_ress.length()<=0)) {
Toast.makeText(MyAndroidAppActivity.this, "please fill the data", Toast.LENGTH_SHORT).show();
} else{
Log.i("name",fName);
Log.i("rel",re_lation);
Log.i("e",add_ress);
mDataSource.addUser(fName, re_lation, add_ress);
}
}
});
}
DataSource.java
private SQLiteDatabase mSQLiteDatabase;
private MySQLiteHelper mSQLiteHelper;
private String[] mAllColumns = {
MySQLiteHelper.COLUMN_ID, MySQLiteHelper.COLUMN_FIRST_NAME, MySQLiteHelper.COLUMN_RELATION, MySQLiteHelper.COLUMN_ADDRESS
};
public DataSource (Context context){
mSQLiteHelper = new MySQLiteHelper(context);
}
public void open() throws SQLiteException {
mSQLiteDatabase = mSQLiteHelper.getWritableDatabase();
}
public void close() {
mSQLiteHelper.close();
}
public void addUser(String first_name, String relation, String address){
ContentValues values = new ContentValues();
Log.i("name",first_name);
values.put(MySQLiteHelper.COLUMN_FIRST_NAME, first_name);
values.put(MySQLiteHelper.COLUMN_RELATION, relation);
values.put(MySQLiteHelper.COLUMN_ADDRESS, address);
mSQLiteDatabase.insert(MySQLiteHelper.TABLE_USERS, null, values);
//Cursor cursor = mSQLiteDatabase.query(MySQLiteHelper.TABLE_USERS, allcolumns, selection, selectionArgs, groupBy, having, orderBy)
}
MySQLiteHelper.java
public class MySQLiteHelper extends SQLiteOpenHelper {
public static final String TABLE_USERS = "users";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_FIRST_NAME = "first_name";
public static final String COLUMN_RELATION = "relation";
public static final String COLUMN_ADDRESS = "address";
private static final String DATABASE_NAME = "users.db";
private static final int DATABASE_VERSION = 1;
// Database creation sql statement
private static final String DATABASE_CREATE = "create table "
+ TABLE_USERS + "( " + COLUMN_ID
+ " integer primary key autoincrement, " + COLUMN_FIRST_NAME
+ " text not null," + COLUMN_RELATION + " text not null," +
COLUMN_ADDRESS + " text not null);";
public MySQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_USERS);
onCreate(db);
}
}
错误Logcat:
06-20 11:26:02.043: E/AndroidRuntime(342): FATAL EXCEPTION: main
06-20 11:26:02.043: E/AndroidRuntime(342): java.lang.NullPointerException
06-20 11:26:02.043: E/AndroidRuntime(342): at com.mkyong.android.MyAndroidAppActivity$1.onClick(MyAndroidAppActivity.java:62)
06-20 11:26:02.043: E/AndroidRuntime(342): at android.view.View.performClick(View.java:2485)
06-20 11:26:02.043: E/AndroidRuntime(342): at android.view.View$PerformClick.run(View.java:9080)
06-20 11:26:02.043: E/AndroidRuntime(342): at android.os.Handler.handleCallback(Handler.java:587)
06-20 11:26:02.043: E/AndroidRuntime(342): at android.os.Handler.dispatchMessage(Handler.java:92)
06-20 11:26:02.043: E/AndroidRuntime(342): at android.os.Looper.loop(Looper.java:123)
06-20 11:26:02.043: E/AndroidRuntime(342): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-20 11:26:02.043: E/AndroidRuntime(342): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 11:26:02.043: E/AndroidRuntime(342): at java.lang.reflect.Method.invoke(Method.java:507)
06-20 11:26:02.043: E/AndroidRuntime(342): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-20 11:26:02.043: E/AndroidRuntime(342): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
这里我在sqlite数据库中插入微调器和其他文本值,在错误行mDataSource.addUser(fName, re_lation, add_ress);
我得到了三个值。但是这里没有创建数据库。我指出错误行并在将值提交到数据库时,它会抛出空指针异常。我的程序中的错误是什么。任何人都可以告诉我?
提前致谢
答案 0 :(得分:0)
mDataSource
尚未初始化
您应该在onCreate()
回拨
protected void onCreate(Bundle savedInstanceState)
{
setContentView(R.layout.layout);
mDataSource = new DataSource(getBaseContext());
// ... The Rest of your code
}
并在您的DataSource的构造函数中调用open()方法
public DataSource (Context context){
mSQLiteHelper = new MySQLiteHelper(context);
open();
}
public void open() throws SQLiteException {
mSQLiteDatabase = mSQLiteHelper.getWritableDatabase();
}