2011-04-08 91 views
0

我是Android應用程序的新手,並試圖在本教程中給出一個示例應用程序。 http://www.jameselsey.co.uk/blogs/techblog/android-and-sqlite-a-really-easy-tutorial-that-anyone-can-do/ 我做了完全相同的...並在IDE中創建了一個項目,並製作了與教程。 這裏是我的主類代碼:Android數據庫新手。運行應用程序時出錯

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 我創建Eclipse的一個新的Android項目,以及解決了這個問題。我認爲在我之前的項目中,我沒有編輯應用程序名稱。但在新項目中,一切都是完美的。所以,問題解決了。在任何情況下,我在這裏張貼的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 

非常感謝你的傢伙。

+0

如果您使用的是eclipse,請轉到DDMS視圖並在此處發佈紅色部分的日誌。 – John 2011-04-08 16:43:54

+0

發佈logcat會很有幫助。轉到命令提示符並嘗試此adb -s emulator-5554 shell,然後如果使用模擬器,則在shell上登錄。 – chaitanya 2011-04-08 16:48:11

+0

我無法在DDMS的eclipse中找到任何東西。什麼都沒有。它的完整空白。 – Maverick 2011-04-08 16:59:32

回答

0

只要刪除setContentView(R.layout.main)。 您的程序現在將立即運行。

數據庫的數據通過setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,results))顯示。

希望你現在明白爲什麼setContentView(R.layout.main)需要刪除。 享受:)

相關問題