2017-01-16 3 views
0

Ich versuche, ListView aus der Datenbank über SimpleCursorAdapter zu füllen, aber es gibt Fehler. verursacht durch: java.lang.IllegalArgumentException: Spalte '_id' existiert nichtAndroid SimpleCursorAdapter füllen ListView aus Datenbank

Hier ist meine BlistActivity, die meine ListView enthält.

public class BListActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_blist); 

    MyDBHandler myDBHandler = new MyDBHandler(this,null,3); 
    ListView listView = (ListView) findViewById(R.id.blistView); 
    Cursor cursor = myDBHandler.showAllRecords(); 
    String[] columnNames = new String[]{"name_number"}; 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      android.R.layout.simple_list_item_1, 
      cursor, 
      columnNames, 
      new int[]{android.R.id.text1}); 
    listView.setAdapter(adapter); 
} 
} 

Hier ist mein XML-Code für diese Aktivität.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.haroon.vuultimateblocker.BListActivity"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/blistView" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     android:choiceMode="multipleChoice"/> 
</RelativeLayout> 

es auch erwähnenswert ist, dass ich das Listview als Multiple-Choice benötigen.

Antwort

0

Was möchten Sie tun? Wollen Sie nur die Daten auflisten, wenn dies der Fall ist

private ListView lvCities; private statische Zeichenfolge [] cities = {"London", "Paris", "NewYork"};

setzen Sie das oben onCreate, in onCreate starten Sie diese Methode initListView();

und dann diese Methode unter onCreate machen, wie diese

private void initListView() { lvCities = (Listview) findViewById (R.id.lvCities);

ArrayAdapter<CharSequence>adapter=new ArrayAdapter<CharSequence>(this,android.R.layout.simple_list_item_checked,cities); 

    lvCities.setAdapter(adapter); 
} 

die XML-Datei Ändern Sie eine Listview mit dieser ID

android haben: id = "@ + id/lvCities"

Wenn Sie eine Datenbank Helfer verwenden müssen, ich glaube, Sie brauchen eine andere Klasse, in der Sie SQLite implementieren, um Ihre Daten in eine Tabelle zu schreiben, die Sie dann ändern können, aber das ist ein ganz anderer Satz Code, den Sie auf StackOverflow oder anderen Sites finden können. Es gibt viele Möglichkeiten, ihn je nach Bedarf zu implementieren.

0

java.lang.IllegalArgumentException: Spalte ‚_id‘ existiert nicht

Dieser Fehler bedeutet, dass Sie nicht die Spalte „_id“ im Cursor zur Verfügung gestellt hat, ist es android Konvention _id zu verwenden Spalte mit dem Cursor, wenn Sie es für Adapter verwenden. Ein Beispiel für einen Arbeits cursor:

String tableName = "mTable"; 
String columns[] = {"_id", "column1", "column2", "column3"}; 
cursor = db.query(table, columns, null, null, null, null, null); 

In Ihrem Fall bearbeiten Sie die showAllRecords() -Methode von MyDBHandler Klasse, wo Sie den Cursor zurück:

Cursor cursor = myDBHandler.showAllRecords(); 

Sie entweder die Tabelle aktualisieren können _id Spalte enthalten oder Sie können es auf diese Weise mit dem Alias ​​und ROWID:

SELECT myTable.ROWID AS _id, column1, column2, column3... from myTable 
bekommen
Verwandte Themen