データベースなどを作成するために使用するSQLiteHelperソースファイルがあります。データベースをインスタンス化し、データをプルしてUIに表示する必要がある別のソースファイルがあります。ただし、エミュレータでアプリを起動すると、アプリがクラッシュします。何が悪いのかわかりません。ソースファイルにエラーはありません。
RestaurantDBソースファイル
package com.demostudio.restaurants;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class RestaurantDB extends SQLiteOpenHelper {
static final String dbName = "RestaurantDB";
static final Integer dbVersion = 1;
static final String restaurantListTable = "RestaurantList";
static final String colRestaurantID = "RestaurantID";
static final String colRestaurantName = "RestaurantName";
static final String colRestaurantStore = "StoreNo";
public RestaurantDB(Context context) {
super(context, dbName, null, dbVersion);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String newTableSQL =
"CREATE TABLE "+
restaurantListTable+
" ("+colRestaurantID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
colRestaurantName+" TEXT NOT NULL, "+
colRestaurantStore+" TEXT NOT NULL "+
");";
db.execSQL(newTableSQL);
ContentValues cv = new ContentValues();
cv.put(colRestaurantName, "Restaurant AAA");
cv.put(colRestaurantStore, "1");
db.insert(restaurantListTable, null, cv);
cv.put(colRestaurantName, "Restaurant BBB");
cv.put(colRestaurantStore, "2");
db.insert(restaurantListTable, null, cv);
db.close();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
AllRestaurantsソースファイル
package com.demostudio.restaurants;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
public class AllRestaurants extends ListActivity {
RestaurantDB db = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
db=new RestaurantDB(AllRestaurants.this);
onPostExecute( ) ;
}
private Cursor doQuery() {
return(db.getReadableDatabase().rawQuery("SELECT colRestaurantID AS _id, colRestaurantName, colRestaurantStore "
+ "FROM RestaurantListTable ORDER BY colRestaurantName", null));
}
public void onPostExecute( ) {
SimpleCursorAdapter adapter;
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
adapter=new SimpleCursorAdapter(this, R.layout.activity_all_restaurants,
doQuery(), new String[] {
RestaurantDB.colRestaurantName,
RestaurantDB.colRestaurantStore },
new int[] { R.id.title, R.id.value },
0);
}
else {
adapter=new SimpleCursorAdapter(this, R.layout.activity_all_restaurants,
doQuery(), new String[] {
RestaurantDB.colRestaurantName,
RestaurantDB.colRestaurantStore },
new int[] { R.id.title, R.id.value });
}
setListAdapter(adapter);
}
}
activity_listview XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ListView
android:id="@android:id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
activity_all_restaurants XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textSize="20sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textSize="20sp"
android:textStyle="bold"/>
</RelativeLayout>
ログファイル
12-13 14:08:52.805:W / Trace(3861):nativeGetEnabledTagsからの予期しない値:0
12-13 14:08:52.805:W / Trace(3861):nativeGetEnabledTagsからの予期しない値:0
12-13 14:08 :54.795:D / dalvikvm(3861):GC_FOR_ALLOCが68Kを解放、7%が2670K / 2860Kを解放、139msを一時停止、合計143ms
12-13 14:08:54.826:I / dalvikvm-heap(3861):ヒープを拡張(フラグメントケース) 1127536バイトの割り当てで3.796MBに12-1314
:08:54.946:D / dalvikvm(3861):GC_FOR_ALLOCが1Kを解放、5%が3770K / 3964Kを解放、112msを一時停止、合計112ms
12-13 14:08:55.145:D / dalvikvm(3861):GC_CONCURRENT解放<1K、5%解放3785K / 3964K、一時停止12ms + 27ms、合計203ms
12-13 14:08:55.618:D / AndroidRuntime(3861):VMのシャットダウン
12-13 14:08:55.618:W / dalvikvm(3861):threadid = 1:キャッチされない例外で終了するスレッド(group = 0x40a70930)
12-13 14:08:55.715:E / AndroidRuntime(3861):致命的な例外:メイン
12-13 14:08:55.715:E / AndroidRuntime(3861):java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.demostudio.restaurants / com.demostudio.restaurants.AllRestaurants}:java.lang.IllegalArgumentException:column '_id'は存在しません
12-1314:08:55.715:E / AndroidRuntime(3861):android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12-13 14:08:55.715:E / AndroidRuntime( 3861):android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)で
12-13 14:08:55.715:E / AndroidRuntime(3861):android.app.ActivityThread.access $ 600(ActivityThread.java:141)
12-13 14:08:55.715:E / AndroidRuntime(3861):android .app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)
12-13 14:08:55.715:E / AndroidRuntime(3861):android.os.Handler.dispatchMessage(Handler.java:99)で
12-13 14 :08:55.715:E / AndroidRuntime(3861):android.os.Looper.loop(Looper.java:137)
12-13 14:08:55.715:E / AndroidRuntime(3861):android.app.ActivityThread main(ActivityThread.java:5039)
12-13 14:08:55.715:E / AndroidRuntime(3861):at java.lang.reflect.Method.invokeNative(Native Method)
12-13 14:08:55.715:E / AndroidRuntime (3861):java.lang.reflect.Method.invoke(Method.java:511)で
12-13 14:08:55.715:E / AndroidRuntime(3861):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
12-13 14:08:55.715:E / AndroidRuntime( 3861):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-13 14:08:55.715:E / AndroidRuntime(3861):dalvik.system.NativeStart.main(ネイティブメソッド)
12-13 14:08:55.715:E / AndroidRuntime(3861):原因:java.lang.IllegalArgumentException:列'_id'が存在しません
12-1314:08:55.715:E / AndroidRuntime(3861):Androidで.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
12-13 14:08:55.715:E / AndroidRuntime(3861):android.support.v4.widget.CursorAdapter.init(CursorAdapter.java:174)
12-13 14:08:55.715:E / AndroidRuntime(3861):android.support.v4.widget.CursorAdapter。(CursorAdapter.java:151)
12-13 14:08:55.715:E / AndroidRuntime(3861): at android.support.v4.widget.ResourceCursorAdapter。(ResourceCursorAdapter.java:93)
12-13 14:08:55.715:E / AndroidRuntime(3861):at android.support.v4.widget.SimpleCursorAdapter。(SimpleCursorAdapter.java: 89)
12-13 14:08:55.715:E / AndroidRuntime(3861):com.demostudio.restaurants.AllRestaurants.onPostExecute(AllRestaurants.java:27)
12-13 14:08:55.715:E / AndroidRuntime(3861) :com.demostudio.restaurants.AllRestaurants.onCreate(AllRestaurants.java:18)
12-13 14:08:55.715:E / AndroidRuntime(3861):android.app.Activity.performCreate(Activity.java:5104)
12-13 14:08:55.715:E / AndroidRuntime(3861):android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-13 14:08:55.715:E / AndroidRuntime(3861):android app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-13 14:08:55.715:E / AndroidRuntime(3861):... 11 more
以前、2つのテキストビューを含むリストビューを同じXMLファイルに配置しましたが、機能しませんでした。そのため、別のXMLファイルに入れましたが、それでも機能しません。