views:

67

answers:

1

Hi, i would like to show my database on a listview in android, but the data is not showing.

Arrival.java package one.two;

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

import android.app.ListActivity;
import android.database.Cursor;
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());
        System.out.println("Array 2 String\n");

        Cursor c = db.getCursor();
        listView = (ListView) findViewById(android.R.id.list);
         setListAdapter(new ArrayAdapter<String>(this, android.R.id.list));
        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this, android.R.id.list);
        this.setListAdapter(mAdapter);
        System.out.println("Show List\n");
        db.close();
    }

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


    }

DBAdapter.java

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
{
    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

        @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 SQLiteDatabase DbLib;

    private static final int DATABASE_VERSION = 1;

    //// context brought up /////////////
    //private final Context context;


        /*public void DBAdapter() throws SQLException
        {
            String myPath = DB_PATH + DATABASE_NAME;
            db = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);
        }//end DBAdapter()*/



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

                        {


                            // 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);

        }
        public Cursor getCursor(){
            return c;

        }

        public void close()
        {
            DbLib.close();

        }
}//end class DBAdapter

main.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<TextView
android:id="@+id/widget32"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ferry Hub"
android:textSize="25sp"
android:textStyle="bold"
android:textColor="#ff009999"
android:layout_x="97px"
android:layout_y="15px"
>
</TextView>
<TextView
android:id="@+id/widget35"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Arrival Time"
android:layout_x="116px"
android:layout_y="48px"
>
</TextView>
<Button
android:id="@+id/widget36"
android:layout_width="96px"
android:layout_height="40px"
android:text="Back"
android:layout_x="101px"
android:layout_y="299px"
>
</Button>
 <ListView   
            android:id="@android:id/list"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
</ListView>


</AbsoluteLayout>
A: 

You should look at CursorAdapter and ResourceCursorAdapter instead of trying to populate an ArrayAdapter, these are designed for the job and will make your code a lot easier to understand.

If you really do want to stick with the code you have then you seem to be missing the code to put your data into the ArrayAdapter, possibly because you're not using the [correct][3] [contructor][4].

[3]: http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter(android.content.Context, int, T[]) [4]: http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter(android.content.Context, int, java.util.List)

Al Sutton