2017-01-16 2 views
0

SimpleCursorAdapter를 통해 데이터베이스에서 ListView를 채우려고하지만 오류가 발생합니다. 발생 원인 : java.lang.IllegalArgumentException : '_id'열이 없습니다.android SimpleCursorAdapter가 데이터베이스에서 ListView를 채 웁니다.

여기 내 ListView가 포함 된 내 BlistActivity입니다.

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

여기가 내 활동 코드입니다.

<?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> 

나는 또한 다중 선택으로 listView가 필요하다는 것을 언급 할 가치가 있습니다.

답변

0

무엇을하려하십니까? 그렇다면 데이터를 나열하고 싶습니까?

개인 ListView lvCities; private static String [] cities = { "London", "Paris", "NewYork"};

onCreate, onCreate에서이 메서드를 시작합니다. initListView();

는 다음과 같은 방법이 아래에서 onCreate을이

개인 무효 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); 
} 

이 ID

안드로이드와 목록보기를하기 위해 XML 파일을 수정 : ID = "@ + ID/lvCities"

는 데이터베이스 도우미를 사용해야하는 경우, 당신이 필요하다고 생각 당신이 수정할 수있는 테이블에 데이터를 쓰도록 SQLite를 구현하는 또 다른 클래스이지만 stackOverflow 또는 다른 사이트에서 찾을 수있는 다른 모든 코드 세트라면 필요한 것에 따라 여러 가지 구현 방법이 있습니다.

0

java.lang.IllegalArgumentException가 : 열 '_id'가이 오류가 커서에서 열 "_id"를 제공하지 않았다는 것을 의미

존재하지 않는, 그것은 _id를 사용하는 안드로이드 규칙은 열을 커서로 사용하여 어댑터에 사용하십시오. 작업 커서의 예 : 당신은 _id 컬럼을 포함하는 테이블을 업데이트 할 수 있습니다

Cursor cursor = myDBHandler.showAllRecords(); 

: 커서를 반환 할 경우

귀하의 경우에는
String tableName = "mTable"; 
String columns[] = {"_id", "column1", "column2", "column3"}; 
cursor = db.query(table, columns, null, null, null, null, null); 

가) (MyDBHandler 클래스의 메소드를 showAllRecords을 편집 별칭과 ROWID :

SELECT myTable.ROWID AS _id, column1, column2, column3... from myTable 
을 사용하면이 방법으로이 방법을 사용할 수 있습니다.
관련 문제