2011-05-12 49 views
0

嗨全部 我需要在listview中填充数据库元素。我得到空指针异常和阵列适配器错误。我做了以下几种方法: 1)创建一个大小为行数的字符串数组2)在数组中存储数据库值3)在列表视图中合并。我尝试了很久,但我找不到它。 编码:问题 - 填充数据库到Android的列表视图

Cursor c = db.rawQuery("select * from stopwatch" , null); 
    if (c != null) { 
    if (c.moveToFirst()) { 
     do { 
     counter=counter+1; // finding no of rows in table. 
     }while (c.moveToNext()); 
    } 
    } 
    array=new String[counter]; 


    counter1=0; 
    Cursor c1 = db.rawQuery("select * from stopwatch" , null); 
    if (c1 != null) { 
    if (c1.moveToFirst()) { 
     do { 
      array[counter1]=String.valueOf(c1.getInt(0))+":"+String.valueOf(c1.getInt(1))+":"+String.valueOf(c1.getInt(2)); 

counter = counter + 1; } while(c1.moveToNext()); } } db.close();

// populating in listview as follows 
    list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array)); 

我的logcat:

05-12 18:52:30.853: ERROR/AndroidRuntime(8330): java.lang.NullPointerException 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:351) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.AbsListView.obtainView(AbsListView.java:1254) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1142) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.ListView.onMeasure(ListView.java:1055) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.View.measure(View.java:7117) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2929) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:619) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:280) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.View.measure(View.java:7117) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2929) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.View.measure(View.java:7117) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:464) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:278) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.View.measure(View.java:7117) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2929) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.View.measure(View.java:7117) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.ViewRoot.performTraversals(ViewRoot.java:713) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1504) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.os.Looper.loop(Looper.java:123) 
    05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at android.app.ActivityThread.main(ActivityThread.java:3948) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
05-12 18:52:30.853: ERROR/AndroidRuntime(8330):  at dalvik.system.NativeStart.main(Native Method) 

回答

0

尝试使用SQLiteOpenHelper 创建datahelper

实现像这样的功能:

public List<List<String>> getData(){ 
     Cursor cursor = this.db.query(TABLE_NAME,new String[] { "value1", "value2" }, null, null, null, null, "code asc"); 
     List<List<String>> list = new ArrayList<List<String>>(); 
     if (cursor.moveToFirst()){ 
      do{ 
       List<String> temp = new ArrayList<String>(); 
       temp.add(cursor.getString(0)); 
       temp.add(cursor.getString(1)); 
       list.add(temp); 
      }while (cursor.moveToNext()); 
     } 
     return list; 
    } 

然后在其他类电话:

private List<List<String>> liItems; 
liItems = dh.getData(); 

/** create an array in the proper length */ 
String[] rgItems = new String[liItems.size()]; 

/** Fill the array with data */ 
for (int i=0; i < liItems.size(); i++){ 
     List<String> temp = liItems.get(i); 
     rgItems[i] = temp.get(0) + " - " + temp.get(1); 
    } 
    /** Populate ListView with list */ 
    ArrayList<String> customerList = new ArrayList<String>(); 
    customerList.addAll(Arrays.asList(rgItems)); 
    adItemAdapter = new ArrayAdapter<String>(this, R.layout.itemlisttext, rgItems); 
    lvItemListview.setAdapter(adItemAdapter); 

iteml isttext是一个xmlLayout与文本视图

这对我来说很好,希望它可以帮助你。

+0

谢谢我得到的解决方案 – 2011-05-12 14:20:56

0

那么你已经使用计数器计数记录。 使用cursor.getCount();

而且使用SimpleCursorAdapter代替ArrayAdapter。 它会帮助你。

看一看this Answer