将csv文件导入SQLite并访问Android Studio



我正在尝试将我的csv文件导入SQLite,并将导入的文件访问到数据库并从android工作室访问。你能告诉我我的代码有什么问题吗?我收到此错误消息!

AssetManager android.content.Context.getAssets((' on a null object reference

public static final String TABLE_NAME = "the_table";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_QUESTION = "question";
public static final String COLUMN_ANSWER = "answer";
public static final String COLUMN_ANSWER_NR = "answer_nr";
public static final String COLUMN_LEVEL_COMPLETE = "level_complete";
public static final String COLUMN_CURRENT_LEVEL = "current_level";
public static final String COLUMN_CRAZY_LEVEL = "crazy_level";
private SQLiteDatabase db;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
importCSVData();
}
public void importCSVData(){
String myCSVFile = "the_table.csv";
AssetManager manager = context.getAssets();
InputStream inStream = null;
try {
inStream = manager.open(myCSVFile);
}catch (IOException e){
e.printStackTrace();
}
BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
String line = "";
db.beginTransaction();
try{
while ((line = buffer.readLine()) != null){
String[] columns = line.split(",");
if(columns.length != 6) {
Log.d("CSVParser", "Skipping Bad CSV Row");
continue;
}
ContentValues cv = new ContentValues(6);
cv.put(COLUMN_ID, columns[0].trim());
cv.put(COLUMN_QUESTION, columns[1].trim());
cv.put(COLUMN_ANSWER, columns[2].trim());
cv.put(COLUMN_ANSWER_NR, columns[3].trim());
cv.put(COLUMN_LEVEL_COMPLETE, columns[4].trim());
cv.put(COLUMN_CURRENT_LEVEL, columns[5].trim());
cv.put(COLUMN_CRAZY_LEVEL, columns[6].trim());
db.insert(TABLE_NAME, null, cv);
}
}catch (IOException e){
e.printStackTrace();
}
db.setTransactionSuccessful();
db.endTransaction();
}

目前您在Activity内。因此,无需在此处使用上下文。像下面这样使用:

AssetManager manager = getAssets();

而不是

AssetManager manager = context.getAssets();

除此之外,您没有在onCreate中初始化SQLiteDatabase。但是你在importCSVData()里面使用了这个,这会导致NullPointerException.因此,首先初始化它,如下所示:

@Override protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);  
QuestionDbHelper dbHelper = QuestionDbHelper.getInstance(this);
db = dbHelper.getWritableDatabase();
importCSVData();  
}

最新更新