Импорт CSV-файла в SQLite и доступ к Android Studio - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь импортировать мой CSV-файл в SQLite и получить доступ к импортированному файлу в базе данных и доступ из студии Android. Подскажите, пожалуйста, что не так с моим кодом? Я получаю это сообщение об ошибке!

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

1 Ответ

0 голосов
/ 21 октября 2019

В настоящее время вы находитесь внутри Activity. Таким образом, нет необходимости использовать контекст здесь. Используйте как показано ниже:

AssetManager manager = getAssets();

вместо

AssetManager manager = context.getAssets();

Кроме того, вы не инициализировали SQLiteDatabase в своемOnCreate. Но вы использовали это внутри 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();  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...