【问题标题】:Import csv file to SQLite and access to Android Studio将csv文件导入SQLite并访问Android Studio
【发布时间】:2020-02-17 12:03:34
【问题描述】:

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

AssetManager android.content.Context.getAssets()' 在空对象引用上

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

【问题讨论】:

    标签: android database sqlite csv import


    【解决方案1】:

    目前您在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();  
    }
    

    【讨论】:

    • 感谢您的回答,但仍然无法为我工作,我在空对象引用上收到此错误消息 .SQLiteDatabase.beginTransaction()'
    • 在调用importCSVData()之前,你已经初始化了db
    • 这是正确的初始化方法吗? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); QuestionDbHelper dbHelper = QuestionDbHelper.getInstance(this); dbHelper.readCSVData(); importCSVData(); //logDatabase(); }
    • 感谢您的出色回答,它现在可以正常工作并且没有错误消息,并且我成功创建了我的新数据库和新表,但它内部没有任何价值,我只能看到列 _id、问题、答案 answer_nr等等。我需要重视它,请帮助我 Md. Asaduzzaman,我需要将我的 csv 文件导入我的数据库。我将带有值的 csv 文件上传到 assets 文件夹`
    • 感谢@Md.Asaduzzman 的回答,我会为您投票
    猜你喜欢
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2012-05-04
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多