ArcHDragoN
Nieuwe gebruiker
- Lid geworden
- 7 sep 2014
- Berichten
- 1
Hallo,
Ik ben sinds kort bezig met programmeren in Android voor een project. Nu ben ik even testprojectjes aan het doen om verschillende dingen uit te proberen.
Ik heb een tutorial gevonden voor het gebruik van prepopulated databases en hoe ik de data daarvan in de listview kan zetten. Dit werkt prima, echter zodra ik de database update veranderd er niets in de listview, het blijft dezelfde data gebruiken dat de oude database had.
en dit is de testhelper class
De database zelf is gemaakt met SQLite Database Browser en het project wordt gemaakt in Eclipse.
Hopelijk hebben jullie een antwoord hiervoor of misschien een manier hoe ik dit beter kan doen.
Mvg,
ArcHDragoN
Ik ben sinds kort bezig met programmeren in Android voor een project. Nu ben ik even testprojectjes aan het doen om verschillende dingen uit te proberen.
Ik heb een tutorial gevonden voor het gebruik van prepopulated databases en hoe ik de data daarvan in de listview kan zetten. Dit werkt prima, echter zodra ik de database update veranderd er niets in de listview, het blijft dezelfde data gebruiken dat de oude database had.
Code:
package com.gdenhaan.listview;
import java.util.ArrayList;
import android.support.v7.app.ActionBarActivity;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private static final String DB_NAME = "test.db";
private static final String TABLE_NAME = "TestTable";
public static final String TEST_ID = "_id";
public static final String TEST_NAME = "Name";
public static final String[] ALL_KEYS = new String[]
{
TEST_ID, TEST_NAME
};
private SQLiteDatabase database;
//private ListView ListView;
//private ArrayList<String> NameList;
//private TestHelper testDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
Button Next = (Button) findViewById(R.id.btnNext);
TestHelper testDB = new TestHelper(this, DB_NAME);
database = testDB.openDataBase();
populateListForm();
Next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Second.class));
}
});
}
public Cursor getAllRows()
{
String where = null;
String orderBy = "Name";
Cursor c = database.query(true, TABLE_NAME, ALL_KEYS, where, null, null, null, null, null);
c.moveToFirst();
return c;
}
private void populateListForm()
{
Cursor cursor = getAllRows();
//startManagingCursor(cursor);
String[] Names = new String[] {TEST_NAME};
int[] toViewFields = new int[]{R.id.textView1};
SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(this, R.layout.list, cursor, Names, toViewFields,1);
myCursorAdapter.changeCursor(cursor);
myCursorAdapter.notifyDataSetChanged();
Log.d("in the getAllRows", myCursorAdapter.toString());
ListView myList = (ListView)findViewById(R.id.listView1);
myList.setAdapter(myCursorAdapter);
ListView mySecondList = (ListView)findViewById(R.id.listView2);
mySecondList.setAdapter(myCursorAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
}
en dit is de testhelper class
Code:
package com.gdenhaan.listview;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.Cursor;
import android.database.SQLException;
import android.util.Log;
public class TestHelper extends SQLiteOpenHelper {
public static String DB_PATH;
public static String DB_NAME;
public SQLiteDatabase database;
public final Context context;
public SQLiteDatabase getDB()
{
return database;
}
public TestHelper(Context context, String databaseName)
{
super(context, databaseName, null, 1);
this.context = context;
String PackageName = context.getPackageName();
DB_PATH = String.format("//data//data//%s//databases//", PackageName);
DB_NAME = databaseName;
openDataBase();
}
public void createDataBase()
{
boolean dbExist = checkDataBase();
if(!dbExist)
{
this.getReadableDatabase();
try
{
copyDataBase();
}
catch(IOException e)
{
Log.e(this.getClass().toString(), "Copying Error");
throw new Error("Error Copying Database!");
}
}
else
{
Log.i(this.getClass().toString(), "Database Already Exists");
}
}
private boolean checkDataBase()
{
SQLiteDatabase checkDB = null;
try
{
String path = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
}
catch(SQLException e)
{
Log.e(this.getClass().toString(), "Error while checking db");
}
if(checkDB != null)
{
checkDB.close();
}
return checkDB != null;
}
private void copyDataBase() throws IOException
{
InputStream externalDBStream = context.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream localDBStream = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = externalDBStream.read(buffer)) > 0)
{
localDBStream.write(buffer,0, bytesRead);
}
localDBStream.close();
externalDBStream.close();
}
public SQLiteDatabase openDataBase() throws SQLException
{
String path = DB_PATH + DB_NAME;
if(database == null)
{
createDataBase();
database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
}
return database;
}
@Override
public synchronized void close()
{
if(database != null)
{
database.close();
}
super.close();
}
@Override
public void onCreate(SQLiteDatabase db)
{
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
}
}
De database zelf is gemaakt met SQLite Database Browser en het project wordt gemaakt in Eclipse.
Hopelijk hebben jullie een antwoord hiervoor of misschien een manier hoe ik dit beter kan doen.
Mvg,
ArcHDragoN