2010-07-23 90 views
0

這裏顯示的數據是我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.listview); 
     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(); 
     String[] from = new String[] {DBAdapter.status}; 
     int[] to = new int[] {R.id.txt1}; 


     SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.listtext, c, from, to); 
     this.setListAdapter(mAdapter); 

     System.out.println("Show List\n"); 
     db.close(); 
    } 

    public static ArrayList<String> getData() 
    { 


     ArrayList<String> items = DBAdapter.getAllTitles(); 
     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 static 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()) 

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

     } 
     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> 
<TextView 
android:id="@+id/Text1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="" 
android:layout_x="200px" 
android:layout_y="90px" 
> 
</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:layout_width="wrap_content" 
    android:layout_y="132dip" 
    android:layout_x="150dip" 
    android:id="@android:id/list" 
    android:layout_height="wrap_content"> 
</ListView> 
</AbsoluteLayout> 

從logcat的錯誤:

07-23 07:00:45.625: ERROR/AndroidRuntime(725): Uncaught handler: thread main exiting due to uncaught exception 
07-23 07:00:45.654: ERROR/AndroidRuntime(725): java.lang.RuntimeException: Unable to start activity ComponentInfo{one.two/one.two.Departure}: java.lang.ClassCastException: java.util.ArrayList 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.app.ActivityThread.access$1800(ActivityThread.java:112) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.os.Looper.loop(Looper.java:123) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.app.ActivityThread.main(ActivityThread.java:3948) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at dalvik.system.NativeStart.main(Native Method) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725): Caused by: java.lang.ClassCastException: java.util.ArrayList 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at one.two.Departure.onCreate(Departure.java:27) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) 
07-23 07:00:45.654: ERROR/AndroidRuntime(725):  ... 11 more 

我可以知道爲什麼我的ListView中沒有顯示任何數據?

+0

你不應該在主線程上這樣做。使用ContentProvider和Loaders .. – urSus 2013-06-22 16:16:17

回答

1

您的代碼中有兩個錯誤,我現在可以發現。第一個不應該是一個問題。您正在創建兩個ListAdapter並將它們設置爲兩個。

setListAdapter(new SimpleCursorAdapter(this, android.R.id.list, c, from, to)); 


SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.id.list, c, from, to); 
this.setListAdapter(mAdapter); 

接下來的事情是你定義的方式你SimpleCursorAdapter

new SimpleCursorAdapter(this, android.R.id.list, c, from, to) 

正如Documentatio看到SimpleCursorAdapter預計,將要用作列表中的小區佈局的ID。您正在提供列表本身的ID。適配器現在將在您的項目中查找與android列表具有相同id的佈局文件,然後嘗試膨脹此佈局並查找數組中提到的視圖並將光標值設置爲該值。這是行不通的。至少在Logcat中應該有一個可見的錯誤。

此外,你提供的ID不應該在你的主佈局,而是在行佈局本身。如果這沒有顯示錯誤你確定光標中有數據嗎?

+0

好吧,我改變了我的simplecursoradapter行。目前有一個不同的錯誤。 – User358218 2010-07-23 07:39:03