I've modified your code a little bit:
public ArrayList<String> getAllContacts() {
ArrayList<String> array_list = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM "+CONTACTS_TABLE_NAME;
Cursor res = db.rawQuery( selectQuery, null );
//check if data exist, proceed
if (res.moveToNext()){
do{
array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_NAME)));
}while(res.moveToNext());
}
//remember to close cursor after use
res.close();
return array_list;
}
//void instead of boolean
public void insertContact (String name, String surname, String phone, String address,String postal) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(CONTACTS_COLUMN_NAME, name);
contentValues.put(CONTACTS_COLUMN_SURNAME, surname);
contentValues.put(CONTACTS_COLUMN_PHONE, phone);
contentValues.put(CONTACTS_COLUMN_ADDRESS, address);
contentValues.put(CONTACTS_COLUMN_POSTAL, postal);
//throw if not inserted
db.insertOrThrow("contacts", "", contentValues);
}
затем вы вставляете в свой стол вот так:
try {
mydb.insertContact("one", "two", "three", "foir", "five");
}catch(Exception e){
Toast.makeText(context, "Insert Failed: " + e.toString(), Toast.LENGTH_SHORT).show();
}
Предоставьте путь относительно classloader, не класс, от которого Вы получаете загрузчик. Например:
resourcesloader.class.getClassLoader().getResource("package1/resources/repository/SSL-Key/cert.jks").toString();
При использовании 'getResource' на Классе относительный путь разрешен на основе пакета, в котором находится Класс. При использовании 'getResource' на ClassLoder относительный путь разрешен на основе корневой папки.
при использовании полного пути, оба, 'getResource' методы запустятся в корневой папке.
resourcesloader.class.getClass()
Может быть сломан к:
Class<resourcesloader> clazz = resourceloader.class;
Class<Class> classClass = clazz.getClass();
, Что означает, что Вы пытаетесь загрузить ресурс с помощью класса начальной загрузки.
Вместо этого Вы, вероятно, хотите что-то как:
resourcesloader.class.getResource("repository/SSL-Key/cert.jks").toString()
, Если только javac предупредил о вызове статических методов для нестатических контекстов...
Самка следующая работа?
resourcesloader.class.getClass().getResource("/package1/resources/repository/SSL-Key/cert.jks")
там причина, Вы не можете указать полный путь включая пакет?
Для получения реального пути к файлу, можно попробовать это:
URL fileUrl = Resourceloader.class.getResource("resources/repository/SSL-Key/cert.jks");
String pathToClass = fileUrl.getPath;
Resourceloader является именем класса здесь. "resources/repository/SSL-Key/cert.jks" является относительным путем в файл. Если бы у Вас был свой guiclass в./package1/java с отдыхом остающейся структуры папок, то Вы взяли бы "../resources/repository/SSL-Key/cert.jks" в качестве относительного пути из-за правил, определяющих относительный путь.
Этот путь можно считать файл с BufferedReader. НЕ ИСПОЛЬЗУЙТЕ СТРОКУ для идентификации пути к файлу, потому что, если у Вас есть пробелы или некоторые символы от не английский алфавит в Вашем пути, Вы получите проблемы, и файл не будет найден.
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(fileUrl.openStream()));
У меня были проблемы с использованием метода getClass().getResource("filename.txt")
.
После прочтения инструкций Java docs, если ваш ресурс не находится в том же пакете, что и класс, из которого вы пытаетесь получить доступ к ресурсу, то вы должны указать ему относительный путь, начиная с '/'
. Рекомендуемая стратегия - поместить файлы ваших ресурсов в папку "ресурсы" в корневом каталоге. Так, например, если у вас есть структура:
src/main/com/mycompany/myapp
то вы можете добавить папку ресурсов, как рекомендует maven в:
src/main/resources
кроме того, вы можете добавить подпапки в папку ресурсов
src/main/resources/textfiles
и сказать, что ваш файл называется myfile.txt
, так что у вас есть
src/main/resources/textfiles/myfile.txt
Теперь вот где возникает дурацкая проблема с путями. Скажем, что у вас есть класс в вашем пакете com.mycompany.myapp
, и вы хотите получить доступ к файлу myfile.txt
из папки ресурсов. Некоторые говорят, что вы должны дать:
"/main/resources/textfiles/myfile.txt" path
или
"/resources/textfiles/myfile.txt"
оба эти файла неправильные. После того, как я запустил mvn clean compile
, файлы и папки копируются в:
myapp/target/classes
папку. Но папки ресурсов там нет, только папки в папке ресурсов. Так что у вас есть:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
так что правильный путь к методу getClass().getResource("")
:
"/textfiles/myfile.txt"
вот он:
getClass().getResource("/textfiles/myfile.txt")
Он больше не будет возвращать ноль, а вернет ваш класс.
Надеюсь, это кому-то поможет. Мне странно, что папка "resources"
тоже не копируется, а только вложенные папки и файлы непосредственно в папку "resources"
. Мне кажется логичным, что папка "resources"
также находится под "myapp/target/classes"