#android #database #eclipse #sqlite
#Android #База данных #eclipse #sqlite
Вопрос:
Я новичок в приложении Android и пробовал один пример приложения, приведенный в этом руководстве.. http://www.jameselsey.co.uk/blogs/techblog/android-and-sqlite-a-really-easy-tutorial-that-anyone-can-do/ Я сделал точно то же самое .. и создал проект в IDE и создал тот же пакет, что и в руководстве. Вот мой основной код класса:
package com.jameselsey;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import com.demo.sql.R;
public class Main extends ListActivity
{
private static String SAMPLE_TABLE_NAME = "PERSONS_TABLE";
private SQLiteDatabase sampleDB = null;
private List<String> results = new ArrayList<String>();
private Cursor cursor = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try
{
sampleDB = openOrCreateDatabase("NAME", MODE_PRIVATE, null);
createTable();
insertData();
lookupData();
this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results));
}
catch (SQLiteException se)
{
Log.e(getClass().getSimpleName(), "Could not create or Open the database");
}
finally
{
if (sampleDB != null)
sampleDB.execSQL("DELETE FROM " SAMPLE_TABLE_NAME);
sampleDB.close();
}
}
/**
* Create a table if it doesn't already exist
*/
private void createTable()
{
sampleDB.execSQL("CREATE TABLE IF NOT EXISTS "
SAMPLE_TABLE_NAME
" (PERSON_NAME VARCHAR, "
" COUNTRY VARCHAR, "
" AGE INT(3));");
}
/**
* Insert some test data, modify as you see fit
*/
private void insertData()
{
sampleDB.execSQL("INSERT INTO " SAMPLE_TABLE_NAME " Values ('James','ENGLAND',25);");
sampleDB.execSQL("INSERT INTO " SAMPLE_TABLE_NAME " Values ('Dave','USA',18);");
sampleDB.execSQL("INSERT INTO " SAMPLE_TABLE_NAME " Values ('Jean-Paul','FRANCE',33);");
sampleDB.execSQL("INSERT INTO " SAMPLE_TABLE_NAME " Values ('Sergio','SPAIN',42);");
sampleDB.execSQL("INSERT INTO " SAMPLE_TABLE_NAME " Values ('Hitori','JAPAN',73);");
}
/**
* Run a query to get some data, then add it to a List and format as you require
*/
private void lookupData()
{
cursor = sampleDB.rawQuery("SELECT PERSON_NAME, COUNTRY, AGE FROM "
SAMPLE_TABLE_NAME
" where AGE > 10 ", null);
if (cursor != null)
{
if (cursor.moveToFirst())
{
do
{
String personName = cursor.getString(cursor.getColumnIndex("PERSON_NAME"));
String country = cursor.getString(cursor.getColumnIndex("COUNTRY"));
int age = cursor.getInt(cursor.getColumnIndex("AGE"));
results.add("" personName ", " country ", " age);
} while (cursor.moveToNext());
}
cursor.close();
}
}
}
и вот мой main.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="fill_parent">
<ListView android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="wrap_content" ></ListView>
</LinearLayout>
Я получил сообщение об ошибке, когда нажал на приложение в эмуляторе. Ошибка была
Извините, приложение demosql (процесс com.demo.sql) неожиданно остановилось. Попробуйте еще раз.
com.demo.sql — это то место, где R.java файл находится.
Есть идеи, почему я получаю эту ошибку?!
Спасибо
РЕДАКТИРОВАТЬ: 1 Хорошо, это то, что я получил из консоли DDMS:
[2011-04-08 17:30:44 - demosql] ------------------------------
[2011-04-08 17:30:44 - demosql] Android Launch!
[2011-04-08 17:30:44 - demosql] adb is running normally.
[2011-04-08 17:30:44 - demosql] Performing com.demo.sql.sqldemoo activity launch
[2011-04-08 17:30:44 - demosql] Automatic Target Mode: launching new emulator with compatible AVD 'my_avd'
[2011-04-08 17:30:44 - demosql] Launching a new emulator with Virtual Device 'my_avd'
[2011-04-08 17:30:46 - demosql] New emulator found: emulator-5554
[2011-04-08 17:30:46 - demosql] Waiting for HOME ('android.process.acore') to be launched...
[2011-04-08 17:31:32 - demosql] WARNING: Application does not specify an API level requirement!
[2011-04-08 17:31:32 - demosql] Device API version is 8 (Android 2.2)
[2011-04-08 17:31:32 - demosql] HOME is up on device 'emulator-5554'
[2011-04-08 17:31:32 - demosql] Uploading demosql.apk onto device 'emulator-5554'
[2011-04-08 17:31:32 - demosql] Installing demosql.apk...
[2011-04-08 17:32:22 - demosql] Success!
[2011-04-08 17:32:22 - demosql] Starting activity com.demo.sql.sqldemoo on device emulator-5554
[2011-04-08 17:32:26 - demosql] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.demo.sql/.sqldemoo }
[2011-04-08 17:59:47 - demosql] ------------------------------
[2011-04-08 17:59:47 - demosql] Android Launch!
[2011-04-08 17:59:47 - demosql] adb is running normally.
[2011-04-08 17:59:47 - demosql] Performing com.demo.sql.sqldemoo activity launch
[2011-04-08 17:59:47 - demosql] Automatic Target Mode: launching new emulator with compatible AVD 'my_avd'
[2011-04-08 17:59:47 - demosql] Launching a new emulator with Virtual Device 'my_avd'
[2011-04-08 17:59:47 - demosql] New emulator found: emulator-5554
[2011-04-08 17:59:47 - demosql] Waiting for HOME ('android.process.acore') to be launched...
[2011-04-08 18:00:22 - demosql] WARNING: Application does not specify an API level requirement!
[2011-04-08 18:00:22 - demosql] WARNING: Unknown device API version!
[2011-04-08 18:00:22 - demosql] HOME is up on device 'emulator-5554'
[2011-04-08 18:00:22 - demosql] Uploading demosql.apk onto device 'emulator-5554'
[2011-04-08 18:00:22 - demosql] Installing demosql.apk...
[2011-04-08 18:01:09 - demosql] Success!
[2011-04-08 18:01:09 - demosql] Starting activity com.demo.sql.sqldemoo on device emulator-5554
[2011-04-08 18:01:18 - demosql] Attempting to connect debugger to 'com.demo.sql' on port 8645
[2011-04-08 18:02:18 - demosql] ------------------------------
[2011-04-08 18:02:18 - demosql] Android Launch!
[2011-04-08 18:02:18 - demosql] adb is running normally.
[2011-04-08 18:02:18 - demosql] Performing com.demo.sql.sqldemoo activity launch
[2011-04-08 18:02:18 - demosql] Automatic Target Mode: Unable to detect device compatibility. Please select a target device.
[2011-04-08 18:02:24 - demosql] WARNING: Application does not specify an API level requirement!
[2011-04-08 18:02:24 - demosql] WARNING: Unknown device API version!
[2011-04-08 18:02:27 - demosql] Application already deployed. No need to reinstall.
[2011-04-08 18:02:27 - demosql] Starting activity com.demo.sql.sqldemoo on device emulator-5554
[2011-04-08 18:02:33 - demosql] ------------------------------
[2011-04-08 18:02:33 - demosql] Android Launch!
[2011-04-08 18:02:33 - demosql] adb is running normally.
[2011-04-08 18:02:33 - demosql] Performing com.demo.sql.sqldemoo activity launch
[2011-04-08 18:02:33 - demosql] Automatic Target Mode: launching new emulator with compatible AVD 'my_avd'
[2011-04-08 18:02:33 - demosql] Launching a new emulator with Virtual Device 'my_avd'
[2011-04-08 18:02:34 - demosql] New emulator found: emulator-5554
[2011-04-08 18:02:34 - demosql] Waiting for HOME ('android.process.acore') to be launched...
РЕДАКТИРОВАТЬ — 2
Я создал новый проект Android в eclipse, и это решило проблему. Я думаю, что в моем предыдущем проекте я не редактировал название приложения. Но в новом проекте все идеально. Итак, проблема РЕШЕНА. В любом случае, я публикую сообщение logcat здесь:
04-08 17:07:15.240: ERROR/Zygote(32): setreuid() failed. errno: 2
04-08 17:07:28.931: ERROR/Zygote(32): setreuid() failed. errno: 17
04-08 17:07:31.020: ERROR/BatteryService(67): usbOnlinePath not found
04-08 17:07:31.020: ERROR/BatteryService(67): batteryVoltagePath not found
04-08 17:07:31.020: ERROR/BatteryService(67): batteryTemperaturePath not found
04-08 17:07:31.060: ERROR/SurfaceFlinger(67): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
04-08 17:07:39.851: ERROR/EventHub(67): could not get driver version for /dev/input/mouse0, Not a typewriter
04-08 17:07:39.851: ERROR/EventHub(67): could not get driver version for /dev/input/mice, Not a typewriter
04-08 17:07:40.071: ERROR/System(67): Failure starting core service
04-08 17:07:40.071: ERROR/System(67): java.lang.SecurityException
04-08 17:07:40.071: ERROR/System(67): at android.os.BinderProxy.transact(Native Method)
04-08 17:07:40.071: ERROR/System(67): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
04-08 17:07:40.071: ERROR/System(67): at android.os.ServiceManager.addService(ServiceManager.java:72)
04-08 17:07:40.071: ERROR/System(67): at com.android.server.ServerThread.run(SystemServer.java:184)
04-08 17:07:41.941: ERROR/SoundPool(67): error loading /system/media/audio/ui/Effect_Tick.ogg
04-08 17:07:41.941: ERROR/SoundPool(67): error loading /system/media/audio/ui/KeypressStandard.ogg
04-08 17:07:41.951: ERROR/SoundPool(67): error loading /system/media/audio/ui/KeypressSpacebar.ogg
04-08 17:07:41.951: ERROR/SoundPool(67): error loading /system/media/audio/ui/KeypressDelete.ogg
04-08 17:07:41.961: ERROR/SoundPool(67): error loading /system/media/audio/ui/KeypressReturn.ogg
04-08 17:07:46.070: ERROR/ThrottleService(67): Could not open GPS configuration file /etc/gps.conf
04-08 17:07:47.550: ERROR/logwrapper(143): executing /system/bin/tc failed: No such file or directory
04-08 17:07:47.620: ERROR/logwrapper(147): executing /system/bin/tc failed: No such file or directory
04-08 17:07:47.720: ERROR/logwrapper(149): executing /system/bin/tc failed: No such file or directory
04-08 17:08:08.903: ERROR/HierarchicalStateMachine(67): TetherMaster - unhandledMessage: msg.what=3
большое вам спасибо, ребята.
Комментарии:
1. Если вы используете eclipse, перейдите в режим просмотра DDMS и опубликуйте здесь раздел журнала, выделенный красным.
2. Было бы полезно опубликовать logcat. перейдите в командную строку и попробуйте эту оболочку adb -s emulator-5554, а затем войдите в систему в оболочке, если вы используете эмулятор.
3. Я не могу ничего найти в перспективе DDMS eclipse. Там вообще ничего нет. Оно полностью пустое.
4. Посмотрите на представление Android -> LogCat в Eclipse и нажмите кнопку «E», чтобы отфильтровать только сообщения уровня «Ошибка». Если у вас подключено более одного устройства / эмулятора, возможно, придется открыть Android -> Просмотр устройств и выбрать, для какого устройства вы хотите просмотреть журналы. Представление LogCat распечатает трассировки стека при ошибках. Отредактировали ли вы свой файл манифеста, чтобы включить это действие?
Ответ №1:
Просто удалите setContentView(R.layout.main). Теперь ваша программа будет запущена now.
Данные базы данных отображаются через setListAdapter(новый ArrayAdapter(this, android.R.layout.simple_list_item_1,результаты)).
Надеюсь, теперь вы понимаете, почему setContentView(R.layout.main) необходимо удалить. Наслаждайтесь 🙂