У меня есть исходный файл SQLiteHelper, который я использую для создания базы данных и всего этого. У меня есть еще один исходный файл, который должен создавать базу данных, извлекать данные и отображать их в пользовательском интерфейсе. Однако, когда я запускаю приложение на эмуляторе, приложение выходит из строя. Я не уверен, что случилось. В исходных файлах нет ошибок.Не удалось извлечь данные из базы данных SQLite и отобразить в действии
источник 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: Вт/трассировки (3861): Неожиданное значение от nativeGetEnabledTags: 0
12-13 14: 08: 52,805: Вт/следа (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): вырасти кучу (фрагмент) до 3.796MB для 1127536-байтового распределения
12-13 14: 08: 54.946: D/dalvikvm (3861): GC_FOR_ALLOC освобожден 1K, 5% бесплатно 3770K/3964K, приостановлено 112 мс, tot аль 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: выход с отключенным исключением (группа = 0x40a70930)
12-13 14:08 : 55.715: E/AndroidRuntime (3861): FATAL EXCEPTION: main
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-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2180)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.app .ActivityThread.handleLaunchActivity (ActivityThread.java:2230)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.app.ActivityThread.access $ 600 (ActivityThread.java:141)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at 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): at android.os.Looper.loop (Looper.java:137)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.app.ActivityThread.main (ActivityThread.java:5039)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): в java.lang.reflect.Method.invokeNative (собственный метод)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at java.lang.reflect.Method.invoke (Method.java:511)
12-13 14:08:55.715: E/AndroidRuntime (3861): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at com .android.internal.os.ZygoteInit.main (ZygoteInit.java:560)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at dalvik.system.NativeStart.main (родной метод)
12 -13 14: 08: 55.715: E/AndroidRuntime (3861): вызвано: java.lang.IllegalArgumentException: column '_id' не существует
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.database.AbstractCursor.getColumnIndexOrThrow (AbstractCursor.java:303)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.support.v4.widget.CursorAdapter.init (CursorAdapter.java:174)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at 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): на android.support.v4.widget.SimpleCursorAdapter . (SimpleCursorAdapter.java:89)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at com.demostudio.restaurants.AllRestaurants.onPostExecute (AllRestaurants.java:27)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at com.demostudio.restaurants.AllRestaurants.onCreate (AllRestaurants.java:18)
12-13 14: 08: 55.715: E/AndroidRunti me (3861): at android.app.Activity.performCreate (Activity.java:5104)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java : 1080)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2144)
12-13 14: 08: 55.715: E/AndroidRuntime (3861): ... 11
Я ранее размещал listview с двумя текстовыми изображениями в том же файле XML, но это не сработало. Итак, теперь я помещаю его в отдельный XML-файл, но он все равно не работает.
Возможный дубликат [Создание базы данных, созданной исходным файлом SQLiteHelper] (http://stackoverflow.com/questions/13832824/instantiate-a-database-created-by-sqlitehelper-source-file) – CommonsWare
, где вы вызываете 'onPostExecute (Void arg0)' метод? –
Да, но у меня нет ответов, которые могут помочь мне разрешить это. – androidnerd