2010-07-23 3 views
0

Voici mon Arrival.javaAucune donnée figurant sur listview

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> 

Erreur de 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 

Puis-je savoir pourquoi aucune donnée n'est affichée sur ma ListView?

+0

Vous ne devriez pas le faire sur le thread principal. Utilisez ContentProvider et chargeuses .. – urSus

Répondre

1

Il y a deux erreurs dans votre code que je place au moment. Le premier ne devrait pas être un problème. Vous créez deux ListAdapters et les définissez tous les deux.

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

La prochaine chose est la façon dont vous définissez votre SimpleCursorAdapter:

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

Comme on le voit dans le Documentatio le SimpleCursorAdapter attend un identifiant pour une mise en page qui sera utilisé comme une cellule dans la liste. Vous fournissez l'identifiant de la liste elle-même. L'adaptateur va maintenant chercher un fichier de mise en page dans votre projet qui a le même ID que la liste android puis essayer de gonfler cette mise en page et trouver les vues qui sont mentionnées dans le au tableau et définir les valeurs du curseur sur ces valeurs. Cela ne peut pas fonctionner. Il devrait y avoir une erreur visible dans Logcat au moins.

également l'identifiant à que vous fournissez ne devrait pas être dans votre mise en page mais dans la mise en page de la ligne elle-même. Si ce n'est pas une erreur, êtes-vous sûr qu'il y a des données dans votre curseur?

+0

Ok j'ai changé la ligne de simplecursoradapter mienne. Il y a actuellement une erreur différente. – User358218

0

Essayez d'appeler manuellement notifyDataSetChanged sur votre adaptateur après avoir rempli votre réservoir avec des données.

Questions connexes