[英]Save Database as CSV File
我是新來的。 當用戶通過測試時,我得到了具有4項考試的應用程序。 用戶名和考試日期以及跟蹤代碼,答案將保存在數據庫中。 另一方面,用戶可以看到檢查結果,該結果已經保存在數據庫中,並且我有一個列表視圖,該視圖顯示數據庫(SQlite數據庫)中的數據,所以我得到了一個Button,當用戶單擊它時,應該將數據庫另存為CSV文件。 我已經在項目中導入了OPENCSV庫。 所以我在我的按鈕上寫代碼。 但是在運行時,當我單擊按鈕時。 什么也沒發生。 並在logcat中出現錯誤:
05-29 21:17:43.198 2531-2531 / ir.arbn.www.mytestprogramsamanik E / ResultActivity:嘗試調用虛擬方法'android.database.sqlite.SQLiteDatabase ir.arbn.www.mytestprogramsamanik.DatabaseHelper.getReadableDatabase()'空對象引用上的java.lang.NullPointerException:嘗試在空對象引用上調用虛擬方法'android.database.sqlite.SQLiteDatabase ir.arbn.www.mytestprogramsamanik.DatabaseHelper.getReadableDatabase()'
數據庫類:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "person.db";
public static final int VERSION = 1;
public static final String TABLE_NAME = "tbl_person";
public static final String S_ID = "id";
public static final String S_NAME = "name";
public static final String S_DATE = "date";
public static final String S_TRACK = "track";
public static final String S_ANSWER = "answer";
public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "" + "(" + S_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + S_NAME + " TEXT NOT NULL," + S_DATE + " TEXT NOT NULL," + S_TRACK + " TEXT NOT NULL," + S_ANSWER + " TEXT NOT NULL)";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, VERSION);
}
public void insertPerson(String name, String date, String track, String answer) {
ContentValues contentValues = new ContentValues();
contentValues.put(S_NAME, name);
contentValues.put(S_DATE, date);
contentValues.put(S_TRACK, track);
contentValues.put(S_ANSWER, answer);
SQLiteDatabase db = this.getWritableDatabase();
db.insert(TABLE_NAME, null, contentValues);
db.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE" + TABLE_NAME);
onCreate(db);
}
public ArrayList<PersonModel> getAllPersonData() {
ArrayList<PersonModel> list = new ArrayList<>();
String sql = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(sql, null);
if (cursor.moveToFirst()) {
do {
PersonModel pm = new PersonModel();
pm.setId(cursor.getInt(0) + "");
pm.setName(cursor.getString(1));
pm.setDate(cursor.getString(2));
pm.setTrack(cursor.getString(3));
pm.setAnswer(cursor.getString(4));
list.add(pm);
} while (cursor.moveToNext());
}
return list;
}
}
即使在這里,您也可以看到帶有Listview和保存按鈕的Activity:
public class ResultActivity extends AppCompatActivity {
@BindView(R.id.listView)
ListView listView;
@BindView(R.id.save)
CustomButton save;
CustomAdapter customAdapter;
ArrayList<PersonModel> arrayList;
DatabaseHelper db;
DatabaseHelper dbhelper;
Context mContext = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
ButterKnife.bind(this);
db = new DatabaseHelper(this);
arrayList = new ArrayList<>();
arrayList = db.getAllPersonData();
customAdapter = new CustomAdapter(this, arrayList);
listView.setAdapter(customAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(mContext, FragmentActivity.class);
startActivity(intent);
}
});
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatabaseHelper db = new DatabaseHelper(getApplicationContext());
File exportDir = new File(Environment.getExternalStorageDirectory(), "");
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File file = new File(exportDir, "csvname.csv");
try {
file.createNewFile();
CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
SQLiteDatabase myDb = dbhelper.getReadableDatabase();
Cursor curCSV = myDb.rawQuery("SELECT * FROM tbl_person", null);
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2)};
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
} catch (Exception sqlEx) {
Log.e("ResultActivity", sqlEx.getMessage(), sqlEx);
}
}
});
}
}
您的變量名似乎犯了一個錯誤:實例化對象db
DatabaseHelper db = new DatabaseHelper(getApplicationContext());
但是您在下面使用dbhelper
SQLiteDatabase myDb = dbhelper.getReadableDatabase();
尚未初始化,並拋出NullPointer。
將上面的行更改為SQLiteDatabase myDb = db.getReadableDatabase();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.