繁体   English   中英

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

[英]Import csv file to SQLite and access to Android Studio

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

AssetManager android.content.Context.getAssets()' 在 null object 参考

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();  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM