Android 我的带有数据库的listview不工作

Android 我的带有数据库的listview不工作,android,listview,Android,Listview,您好,我在“活动”中创建了一个列表视图,希望在其中显示数据库中的内容。但是出现了一个错误,说找不到列表视图。有人能给我一个更好的解决方案来克服这个错误吗? 我的日志如下所示 08-23 07:04:28.025: E/AndroidRuntime(24675): FATAL EXCEPTION: main 08-23 07:04:28.025: E/AndroidRuntime(24675): java.lang.RuntimeException: Unable to s

您好,我在“活动”中创建了一个列表视图,希望在其中显示数据库中的内容。但是出现了一个错误,说找不到列表视图。有人能给我一个更好的解决方案来克服这个错误吗?

我的日志如下所示

    08-23 07:04:28.025: E/AndroidRuntime(24675): FATAL EXCEPTION: main    
    08-23 07:04:28.025: E/AndroidRuntime(24675): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.neochat/com.neochat.Friends_list}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ActivityThread.startActivityNow(ActivityThread.java:2023)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:749    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost.setCurrentTab(TabHost.java:413)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:154)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:546)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.view.View.performClick(View.java:4204)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.view.View$PerformClick.run(View.java:17355)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.os.Handler.handleCallback(Handler.java:725)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at  
    android.os.Handler.dispatchMessage(Handler.java:92)
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at
 android.os.Looper.loop(Looper.java:137   
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    android.app.ActivityThread.main(ActivityThread.java:5041)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    java.lang.reflect.Method.invokeNative(Native Method)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    java.lang.reflect.Method.invoke(Method.java:511)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at dalvik.system.NativeStart.main(Native Method) 
    08-23 07:04:28.025: E/AndroidRuntime(24675): Caused by: java.lang.RuntimeException: Your   
    content must have a ListView whose id attribute is 'android.R.id.list'    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ListActivity.onContentChanged(ListActivity.java:243)
             public class Friends_list extends ListActivity implements  
                        OnItemClickListener{


        private ArrayList<String> results = new ArrayList<String>();

        private String tableName = LoginDataBaseAdapter.tableName;

            private SQLiteDatabase newDB;

           ListView listview;
             Context context;



          @Override
       protected void onCreate(Bundle savedInstanceState) {



    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_friends);
    //listview=(ListView)findViewById(R.id.list);

    openAndQueryDatabase();

    displayResultList();


    context=this;


    //String[] arrayColumns=new String[]{"Name,Username"};
    //int[]arrayViewIDs=new int[] 
             {R.id.textViewSMSSender,R.id.textViewMessageBody};
    //Cursor cursor;

            //cursor.getContentResolver().query(Uri.parse("content://sms/inbox"),
             null,null,null,null);
    //@SuppressWarnings("deprecation")
    //SimpleCursorAdapter adapter=new 
              SimpleCursorAdapter(this,R.layout.friendsms, cursor, arrayColumns, 
              arrayViewIDs);

    //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        //   android.R.layout.simple_list_item_activated_1, android.R.id.text1, 
             value); 

    //listview.setAdapter(adapter);


    //listview.setOnItemClickListener(this);
         }


          private void setListAdapter(ArrayAdapter<String> arrayAdapter) {
    // TODO Auto-generated method stub

             }

              private void openAndQueryDatabase() {
       try {

          LoginDataBaseAdapter loginDataBaseAdapter=new     
                      LoginDataBaseAdapter(this.getApplicationContext());
           newDB=loginDataBaseAdapter.getWritableDatabase();
          Cursor c=newDB.rawQuery("  SELECT    NAME   , 
                   USERNAME     FROM    "+ tableName, null);
    if (c != null ) { 
        if  (c.moveToFirst()) {
            do {
                    String Name=c.getString(c.getColumnIndex("NAME"));
                   String Username=c.getString(c.getColumnIndex("USERNAME"));
            }
                 while(c.moveToNext());             
         }
           }
             }
               catch (SQLiteException se) {
        Log.e(getClass().getSimpleName(), "Could not open the database");
           }
               finally {
             if(newDB!=null)
        newDB.execSQL("   DELETE    FROM   "+ tableName);
               newDB.close();
                   }
             }

                private void displayResultList() {

         TextView tView = new TextView(this);
            tView.setText("Friends");
            getListView().addHeaderView(tView);
             setListAdapter(new ArrayAdapter<String>(this,
                       android.R.layout.simple_list_item_1, results));
                    getListView().setTextFilterEnabled(true);


                    }


        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) 
        {

            Intent in2=new   
                 Intent(Friends_list.this,InboxActivity.class);
            startActivity(in2);
        }


                    }
         <LinearLayout  
          android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
              >
             <ListView
          android:id="@+id/list"
         style="@style/WhiteText"
              android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                android:paddingTop="10dp"
                >
            </ListView>  
           </LinearLayout>
在下面给出我的java类

    08-23 07:04:28.025: E/AndroidRuntime(24675): FATAL EXCEPTION: main    
    08-23 07:04:28.025: E/AndroidRuntime(24675): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.neochat/com.neochat.Friends_list}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ActivityThread.startActivityNow(ActivityThread.java:2023)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:749    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost.setCurrentTab(TabHost.java:413)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:154)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:546)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.view.View.performClick(View.java:4204)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.view.View$PerformClick.run(View.java:17355)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.os.Handler.handleCallback(Handler.java:725)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at  
    android.os.Handler.dispatchMessage(Handler.java:92)
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at
 android.os.Looper.loop(Looper.java:137   
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    android.app.ActivityThread.main(ActivityThread.java:5041)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    java.lang.reflect.Method.invokeNative(Native Method)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    java.lang.reflect.Method.invoke(Method.java:511)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at dalvik.system.NativeStart.main(Native Method) 
    08-23 07:04:28.025: E/AndroidRuntime(24675): Caused by: java.lang.RuntimeException: Your   
    content must have a ListView whose id attribute is 'android.R.id.list'    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ListActivity.onContentChanged(ListActivity.java:243)
             public class Friends_list extends ListActivity implements  
                        OnItemClickListener{


        private ArrayList<String> results = new ArrayList<String>();

        private String tableName = LoginDataBaseAdapter.tableName;

            private SQLiteDatabase newDB;

           ListView listview;
             Context context;



          @Override
       protected void onCreate(Bundle savedInstanceState) {



    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_friends);
    //listview=(ListView)findViewById(R.id.list);

    openAndQueryDatabase();

    displayResultList();


    context=this;


    //String[] arrayColumns=new String[]{"Name,Username"};
    //int[]arrayViewIDs=new int[] 
             {R.id.textViewSMSSender,R.id.textViewMessageBody};
    //Cursor cursor;

            //cursor.getContentResolver().query(Uri.parse("content://sms/inbox"),
             null,null,null,null);
    //@SuppressWarnings("deprecation")
    //SimpleCursorAdapter adapter=new 
              SimpleCursorAdapter(this,R.layout.friendsms, cursor, arrayColumns, 
              arrayViewIDs);

    //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        //   android.R.layout.simple_list_item_activated_1, android.R.id.text1, 
             value); 

    //listview.setAdapter(adapter);


    //listview.setOnItemClickListener(this);
         }


          private void setListAdapter(ArrayAdapter<String> arrayAdapter) {
    // TODO Auto-generated method stub

             }

              private void openAndQueryDatabase() {
       try {

          LoginDataBaseAdapter loginDataBaseAdapter=new     
                      LoginDataBaseAdapter(this.getApplicationContext());
           newDB=loginDataBaseAdapter.getWritableDatabase();
          Cursor c=newDB.rawQuery("  SELECT    NAME   , 
                   USERNAME     FROM    "+ tableName, null);
    if (c != null ) { 
        if  (c.moveToFirst()) {
            do {
                    String Name=c.getString(c.getColumnIndex("NAME"));
                   String Username=c.getString(c.getColumnIndex("USERNAME"));
            }
                 while(c.moveToNext());             
         }
           }
             }
               catch (SQLiteException se) {
        Log.e(getClass().getSimpleName(), "Could not open the database");
           }
               finally {
             if(newDB!=null)
        newDB.execSQL("   DELETE    FROM   "+ tableName);
               newDB.close();
                   }
             }

                private void displayResultList() {

         TextView tView = new TextView(this);
            tView.setText("Friends");
            getListView().addHeaderView(tView);
             setListAdapter(new ArrayAdapter<String>(this,
                       android.R.layout.simple_list_item_1, results));
                    getListView().setTextFilterEnabled(true);


                    }


        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) 
        {

            Intent in2=new   
                 Intent(Friends_list.this,InboxActivity.class);
            startActivity(in2);
        }


                    }
         <LinearLayout  
          android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
              >
             <ListView
          android:id="@+id/list"
         style="@style/WhiteText"
              android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                android:paddingTop="10dp"
                >
            </ListView>  
           </LinearLayout>
public class Friends\u list扩展了ListActivity实现
麦克利克监听器{
private ArrayList results=new ArrayList();
私有字符串tableName=LoginDataBaseAdapter.tableName;
私有sqlitedatabasenewdb;
列表视图列表视图;
语境;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u friends);
//listview=(listview)findViewById(R.id.list);
openAndQueryDatabase();
displayResultList();
上下文=这个;
//String[]arrayColumns=新字符串[]{“名称,用户名”};
//int[]arrayViewIDs=新int[]
{R.id.textViewSMSSender,R.id.textViewMessageBody};
//光标;
//cursor.getContentResolver().query(Uri.parse(“content://sms/inbox"),
空,空,空,空);
//@抑制警告(“弃用”)
//SimpleCorsorAdapter适配器=新
SimpleCursorAdapter(此,R.layout.friendsms,光标,arrayColumns,
arrayViewIDs);
//ArrayAdapter=新的ArrayAdapter(此,
//android.R.layout.simple\u list\u item\u activated\u 1,android.R.id.text1,
价值);
//setAdapter(适配器);
//setOnItemClickListener(this);
}
私有void setListAdapter(ArrayAdapter ArrayAdapter){
//TODO自动生成的方法存根
}
私有void openAndQueryDatabase(){
试一试{
LoginDataBaseAdapter LoginDataBaseAdapter=新建
LoginDataBaseAdapter(this.getApplicationContext());
newDB=loginDataBaseAdapter.getWritableDatabase();
游标c=newDB.rawQuery(“选择名称,
来自“+tableName,null”的用户名;
如果(c!=null){
if(c.moveToFirst()){
做{
字符串名称=c.getString(c.getColumnIndex(“名称”));
字符串用户名=c.getString(c.getColumnIndex(“用户名”);
}
而(c.moveToNext());
}
}
}
catch(sqlitese异常){
Log.e(getClass().getSimpleName(),“无法打开数据库”);
}
最后{
if(newDB!=null)
newDB.execSQL(“从“+tableName”中删除);
newDB.close();
}
}
私有void显示结果列表(){
TextView tView=新的TextView(此);
tView.setText(“朋友”);
getListView().addHeaderView(tView);
setListAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_1,results));
getListView().setTextFilterEnabled(true);
}
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3)
{
意图in2=新
意图(Friends\u list.this,InboxActivity.class);
星触觉(in2);
}
}
这是我用来显示列表视图的xml代码

    08-23 07:04:28.025: E/AndroidRuntime(24675): FATAL EXCEPTION: main    
    08-23 07:04:28.025: E/AndroidRuntime(24675): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.neochat/com.neochat.Friends_list}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ActivityThread.startActivityNow(ActivityThread.java:2023)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:749    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost.setCurrentTab(TabHost.java:413)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:154)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:546)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.view.View.performClick(View.java:4204)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.view.View$PerformClick.run(View.java:17355)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.os.Handler.handleCallback(Handler.java:725)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at  
    android.os.Handler.dispatchMessage(Handler.java:92)
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at
 android.os.Looper.loop(Looper.java:137   
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    android.app.ActivityThread.main(ActivityThread.java:5041)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    java.lang.reflect.Method.invokeNative(Native Method)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    java.lang.reflect.Method.invoke(Method.java:511)    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at    
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at dalvik.system.NativeStart.main(Native Method) 
    08-23 07:04:28.025: E/AndroidRuntime(24675): Caused by: java.lang.RuntimeException: Your   
    content must have a ListView whose id attribute is 'android.R.id.list'    
    08-23 07:04:28.025: E/AndroidRuntime(24675):    at     
    android.app.ListActivity.onContentChanged(ListActivity.java:243)
             public class Friends_list extends ListActivity implements  
                        OnItemClickListener{


        private ArrayList<String> results = new ArrayList<String>();

        private String tableName = LoginDataBaseAdapter.tableName;

            private SQLiteDatabase newDB;

           ListView listview;
             Context context;



          @Override
       protected void onCreate(Bundle savedInstanceState) {



    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_friends);
    //listview=(ListView)findViewById(R.id.list);

    openAndQueryDatabase();

    displayResultList();


    context=this;


    //String[] arrayColumns=new String[]{"Name,Username"};
    //int[]arrayViewIDs=new int[] 
             {R.id.textViewSMSSender,R.id.textViewMessageBody};
    //Cursor cursor;

            //cursor.getContentResolver().query(Uri.parse("content://sms/inbox"),
             null,null,null,null);
    //@SuppressWarnings("deprecation")
    //SimpleCursorAdapter adapter=new 
              SimpleCursorAdapter(this,R.layout.friendsms, cursor, arrayColumns, 
              arrayViewIDs);

    //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        //   android.R.layout.simple_list_item_activated_1, android.R.id.text1, 
             value); 

    //listview.setAdapter(adapter);


    //listview.setOnItemClickListener(this);
         }


          private void setListAdapter(ArrayAdapter<String> arrayAdapter) {
    // TODO Auto-generated method stub

             }

              private void openAndQueryDatabase() {
       try {

          LoginDataBaseAdapter loginDataBaseAdapter=new     
                      LoginDataBaseAdapter(this.getApplicationContext());
           newDB=loginDataBaseAdapter.getWritableDatabase();
          Cursor c=newDB.rawQuery("  SELECT    NAME   , 
                   USERNAME     FROM    "+ tableName, null);
    if (c != null ) { 
        if  (c.moveToFirst()) {
            do {
                    String Name=c.getString(c.getColumnIndex("NAME"));
                   String Username=c.getString(c.getColumnIndex("USERNAME"));
            }
                 while(c.moveToNext());             
         }
           }
             }
               catch (SQLiteException se) {
        Log.e(getClass().getSimpleName(), "Could not open the database");
           }
               finally {
             if(newDB!=null)
        newDB.execSQL("   DELETE    FROM   "+ tableName);
               newDB.close();
                   }
             }

                private void displayResultList() {

         TextView tView = new TextView(this);
            tView.setText("Friends");
            getListView().addHeaderView(tView);
             setListAdapter(new ArrayAdapter<String>(this,
                       android.R.layout.simple_list_item_1, results));
                    getListView().setTextFilterEnabled(true);


                    }


        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) 
        {

            Intent in2=new   
                 Intent(Friends_list.this,InboxActivity.class);
            startActivity(in2);
        }


                    }
         <LinearLayout  
          android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
              >
             <ListView
          android:id="@+id/list"
         style="@style/WhiteText"
              android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                android:paddingTop="10dp"
                >
            </ListView>  
           </LinearLayout>

您的
列表视图的
id
应该是
android:id=“@android:id/list

因此,您的xml将如下所示:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ListView
        android:id="@android:id/list"
        style="@style/WhiteText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"/>
</LinearLayout>


您将该id称为android.R.id.list,我刚刚在我的listview上进行了测试,dosent找到了该id。仅使用R.id.list我希望它能有所帮助!

因为您正在扩展ListActivity, 你最好这样做:

listView = getListView();

简易解决方案仅扩展了简单的
活动

public class Friends_list extends ListActivity
在onCreate()中


您的内容必须有一个id属性为“android.R.id.list”的ListView
是的,伙计,非常感谢。但是我在列表中看不到任何内容。该怎么办?