Привет всем, я пытался использовать базу данных и показать ее информацию в listView, но я не могу заставить ее работать.
Вот мой класс DatabaseHelper (он расширяется от SQLiteOpenHelper):
public static String DB_PATH = "/data/data/ice.tea09.sqlitedemo/databases/";
public static String DB_NAME = "Test.sqlite";
public static final int DB_VERSION = 1;
public static final String TB_USER = "Users";
private SQLiteDatabase myDB;
private Context context;
//private String DB_PATH =context.getFilesDir().getPath();
public DatabaseHelper(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db)
{
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// TODO Auto-generated method stub
}
@Override
public synchronized void close()
{
if(myDB!=null)
{
myDB.close();
}
super.close();
}
public List<String> getAllUsers()
{
List<String> listUsers = new ArrayList<String>();
SQLiteDatabase db = this.getWritableDatabase();
Cursor c;
try
{
c = db.rawQuery("SELECT * FROM " + TB_USER , null);
if(c == null) return null;
String name;
c.moveToFirst();
do
{
name = c.getString(1);
listUsers.add(name);
} while (c.moveToNext());
c.close();
}
catch (Exception e)
{
Log.e("tle99", e.getMessage());
}
db.close();
return listUsers;
}
/*
* Copy database from source code assets to device
* @throws IOException
*/
public void copyDataBase() throws IOException
{
try
{
InputStream myInput = context.getAssets().open(DB_NAME);
String outputFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outputFileName);
byte[] buffer = new byte[1024];
int length;
while((length = myInput.read(buffer))>0)
{
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
catch (Exception e)
{
Log.e("tle99 - copyDatabase", e.getMessage());
}
}
/*
* Check if the database doesn't exist on device, create new one
* @throws IOException
*/
public void createDataBase() throws IOException
{
boolean dbExist = checkDataBase();
if (dbExist)
{
}
else
{
this.getReadableDatabase();
try
{
copyDataBase();
}
catch (IOException e)
{
Log.e("tle99 - create", e.getMessage());
}
}
}
// ---------------------------------------------
// PRIVATE METHODS
// ---------------------------------------------
/*
* Check if the database is exist on device or not
* @return
*/
private boolean checkDataBase()
{
SQLiteDatabase tempDB = null;
try
{
String myPath = DB_PATH + DB_NAME;
tempDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
catch (SQLiteException e)
{
Log.e("tle99 - check", e.getMessage());
}
if (tempDB != null)
{
tempDB.close();
}
return tempDB != null ? true : false;
}
А это мой ActivityMain: `
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataBaseHandler=new DataBaseHandler(this);
try
{
dataBaseHandler.createDataBase();
}
catch (IOException e) {
e.printStackTrace();
}
listViewusers=findViewById(R.id.listView);
List<String> list=dataBaseHandler.getAllUsers();
if(list!=null) {
arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.activity_list_item, list);
listViewusers.setAdapter(arrayAdapter);
}`
У меня есть база данных в папке с активами
Приложение ничего не показывает, когда оно запущено и работает
Кто-нибудь может мне помочь с этим, пожалуйста, я действительно не имею ни малейшего представления.