Новичок в базе данных Android. Ошибка при запуске приложения

#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) необходимо удалить. Наслаждайтесь 🙂