views:

56

answers:

1

Here is my code for my db class:

package one.two;

import java.util.List;

import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

import java.util.ArrayList;

public class DBAdapter extends ListActivity
{
    public String status = "status";
    public String id = "id";
    public String arrival = "arrival";
    public String destination = "destination";
    public String ferry = "ferry";
    private static String DB_PATH = "/data/data/one.two/databases/";
    private static final String DATABASE_NAME = "ferry.db";
    private static final String DATABASE_TABLE = "port";
    public static Context context;
    public Cursor c;

    public static SQLiteDatabase DbLib;


    //overloaded non-null constructor
    public DBAdapter(Context context)
    {
        DbLib = context.openOrCreateDatabase(DATABASE_NAME,  SQLiteDatabase.CREATE_IF_NECESSARY,null);
        System.out.println("OpenOrCreateDB Done");
    }

    public class DatabaseHelper extends SQLiteOpenHelper
    {
        Context context;
        DatabaseHelper(Context context)
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            this.context = context;

        }//end constructor DatabaseHelper

        // ---closes the database---
        public void close()
        {
            DBHelper.close();
        }//end close()

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion,
                int newVersion)
        {
        }//end onUpgrade()

        @Override
        public void onCreate(SQLiteDatabase db)
        {

        }//end onCreate()
    }// end class DatabaseHelper

    private static DatabaseHelper DBHelper;

    private static final int DATABASE_VERSION = 1;




        public static ArrayList<String> getAllTitles()
        {

            ArrayList<String> port = new ArrayList<String>();
                Cursor c=null;


                c = DbLib.query("port",
                        new String[] { "status", "id", "arrival",
                                "destination", "ferry" }, null, null,
                        null, null, null);
                try {
                    if (c!=null) { // start - when there is at least 1 record
                        System.out.println("Cursor is NOT NULL");

                        int i =0;
                        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) 

                        {
                                    // Debug Stm
                            System.out.println("Record No. "+i);
                            System.out.println(c.getString(0));
                            System.out.println(c.getString(1));
                            System.out.println(c.getString(2));
                            System.out.println(c.getString(3));
                            System.out.println(c.getString(4));
                            // Assign database cursor.records to arraylist
                            port.add(i,c.getString(0));
                            port.add(i,c.getString(1));
                            port.add(i,c.getString(2));
                            port.add(i,c.getString(3));
                            port.add(i,c.getString(4));
                            i = i + 1;

                        }
                    } // end - where there is at least 1 record


                } finally {
                    if (c!=null) {
                    c.close();
                }

                }   
            return port;
        }//end getAllTitles()

        public void open() {
            //Open the database
            String myPath = DB_PATH + DATABASE_NAME;
            DbLib = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        }
    }//end class DBAdapter

My Arrival class

package one.two;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class Arrival extends ListActivity
{
    private ListView listView;


    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState)
    {
        ArrayList<String> retList = new ArrayList<String>();

        System.out.println("Start onCreate Function\n");

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        System.out.println("In onCreate Function\n");
        System.out.println("In of GetData\n");
        DBAdapter db = new DBAdapter(this); 

        System.out.println("DB Open\n");
        db.open();
        System.out.println("DB Opened\n");
        retList = getData();
        System.out.println("Out of GetData\n");
        // force count no. of records in table
        // dump to check index
        int cnt = 2;

        int i=0;
        for (i = 0; i<cnt; i++)
            System.out.println(retList.toString());


        listView = (ListView) findViewById(android.R.id.list);
        SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.id.list, null, null, null);
        this.setListAdapter(mAdapter);
        // db.close();
    }

    @SuppressWarnings("static-access")
    public static ArrayList<String> getData()
     {


        ArrayList<String> items = DBAdapter.getAllTitles();
        // titles ???? redundant
        //ArrayList<String> titles = new ArrayList<String>(items);
        System.out.println("Return a LIST titles\n");
         return items;
        }


    }

Thank you

+1  A: 

I find it strange your DBAdapter is extending ListActivity - did you mean this?

Also to return the Cursor, you'll need to create a method in the DBAdapter class which returns it:

protected Cursor getCursor() {
    return c;
}

Arrivals will then need to hold a reference to the DBAdapter class and execute:

Cursor result = db.getCursor();
Matty F
So i am not supposed to extend anything for DBAdapter?By the way Cursor result = db.getCursor, what is result? and do i call it at my ArrayAdapter method or do i call c?
User358218
No, ListActivity is a subclass of the Android app class Activity and used only for displaying the current task to the user. Since your database adapter is purposed only to interact with the database and return data, it does not need to extend anything.I think you should read the Java tutorials at http://java.sun.com/docs/books/tutorial/java/index.html which will help explain how object oriented programming works. For this task, you have your Arrival class, this class will make an instance of the DBAdapter class and hold it in db which you call methods on, eg, getCursor();
Matty F