问题 - 填充到数据库中的Andr​​oid的ListView [英] problem - populate database into listview in android

查看:216
本文介绍了问题 - 填充到数据库中的Andr​​oid的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好
我需要填充的ListView数据库元素。我得到空指针异常和数组适配器的错误。我做了以下几个方面:
1)创建一个字符串数组的行数的大小2)排列3存储数据库中的值)的列表视图合并。我试过很长一段时间,但我不能找到它。
在编码:

 光标C = db.rawQuery(从秒表选择*,NULL);
    如果(C!= NULL){
    如果(c.moveToFirst()){
      做{
        计数器=计数器+ 1; //发现没有行的表。
      }而(c.moveToNext());
    }
    }
    阵列=新的String [窗口];
    计数器1 = 0;
    游标c1 = db.rawQuery(SELECT * FROM秒表,NULL);
    如果(C1!= NULL){
    如果(c1.moveToFirst()){
      做{
           array[counter1]=String.valueOf(c1.getInt(0))+\":\"+String.valueOf(c1.getInt(1))+\":\"+String.valueOf(c1.getInt(2));

柜台=柜台+ 1;
          }而(c1.moveToNext());
        }
        }
        db.close();

  //在列表视图填充如下
     list1.setAdapter(新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_1,数组));

我logcat的:

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


解决方案

尝试使用的 SQLiteOpenHelper
创建datahelper

实施像这样一个功能:

 公开名单<名单,LT;弦乐>>的getData(){
       光标光标= this.db.query(TABLE_NAME,新的String [] {值1,值2},NULL,NULL,NULL,NULL,code ASC);
       清单<名单,LT;弦乐>>名单=新的ArrayList<名单,LT;弦乐>>();
       如果(cursor.moveToFirst()){
           做{
               清单<串GT;临时=新的ArrayList<串GT;();
               temp.add(cursor.getString(0));
               temp.add(cursor.getString(1));
               list.add(临时);
           }而(cursor.moveToNext());
       }
       返回列表;
   }

然后在其他类调用:

 私人列表<名单,LT;弦乐>> liItems;
liItems = dh.getData();/ **创建适当长度的数组* /
的String [] = rgItems新的String [liItems.size()];/ **填充阵列数据* /
的for(int i = 0; I< liItems.size();我++){
        清单<串GT; TEMP = liItems.get(I)
        rgItems [I] = temp.get(0)+ - + temp.get(1);
    }
    / **填充ListView控件与列表* /
    ArrayList的<串GT; customerList =新的ArrayList<串GT;();
    customerList.addAll(Arrays.asList(rgItems));
    adItemAdapter =新ArrayAdapter<串GT;(这一点,R.layout.itemlisttext,rgItems);
    lvItemListview.setAdapter(adItemAdapter);

itemlisttext是一个TextView的xmlLayout

这正常工作对我来说,希望它可以帮助你。

hi all i need to populate database elements in listview. i get null pointer exception and array adapter errors. i did the following ways: 1)created a string array with size of number of rows 2) stored database values in array 3)merge in listview . i tried long time but i cannot find it. in coding:

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

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

解决方案

Try using the SQLiteOpenHelper to create a datahelper

implement a function like so:

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

then in the other class call:

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

itemlisttext is a xmlLayout with textview

This works fine for me, hope it helps you.

这篇关于问题 - 填充到数据库中的Andr​​oid的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆