2012-08-06 77 views
0

我想知道爲什麼我無法打開我的應用程序。另外,我試圖從SQLite數據庫檢索數據並插入微調器。打開Android應用程序的問題

的logcat的說:

08-06 09:37:41.262: I/dalvikvm(532): threadid=3: reacting to signal 3 
08-06 09:37:41.343: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt' 
08-06 09:37:41.643: D/gralloc_goldfish(532): Emulator without GPU emulation detected. 
08-06 09:37:41.773: I/dalvikvm(532): threadid=3: reacting to signal 3 
08-06 09:37:41.793: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt' 
08-06 09:37:43.293: D/AndroidRuntime(532): Shutting down VM 
08-06 09:37:43.303: W/dalvikvm(532): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
08-06 09:37:43.312: E/AndroidRuntime(532): FATAL EXCEPTION: main 
08-06 09:37:43.312: E/AndroidRuntime(532): java.lang.RuntimeException: Unable to start activity ComponentInfo{main.page/main.page.PersonalInfo}: java.lang.NullPointerException 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.os.Looper.loop(Looper.java:137) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.ActivityThread.main(ActivityThread.java:4424) 
08-06 09:37:43.312: E/AndroidRuntime(532): at java.lang.reflect.Method.invokeNative(Native Method) 
08-06 09:37:43.312: E/AndroidRuntime(532): at java.lang.reflect.Method.invoke(Method.java:511) 
08-06 09:37:43.312: E/AndroidRuntime(532): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
08-06 09:37:43.312: E/AndroidRuntime(532): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
08-06 09:37:43.312: E/AndroidRuntime(532): at dalvik.system.NativeStart.main(Native Method) 
08-06 09:37:43.312: E/AndroidRuntime(532): Caused by: java.lang.NullPointerException 
08-06 09:37:43.312: E/AndroidRuntime(532): at main.page.InfoDBAdapter.getAllContacts(InfoDBAdapter.java:113) 
08-06 09:37:43.312: E/AndroidRuntime(532): at main.page.PersonalInfo.onCreate(PersonalInfo.java:41) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.Activity.performCreate(Activity.java:4465) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
08-06 09:37:43.312: E/AndroidRuntime(532): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
08-06 09:37:43.312: E/AndroidRuntime(532): ... 11 more 
08-06 09:37:43.694: I/dalvikvm(532): threadid=3: reacting to signal 3 
08-06 09:37:43.713: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt' 
08-06 09:37:43.923: I/dalvikvm(532): threadid=3: reacting to signal 3 
08-06 09:37:43.933: I/dalvikvm(532): Wrote stack traces to '/data/anr/traces.txt' 

下面是從檢索數據庫中的數據編碼並投入微調。

@Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.info); 

     Cursor c = infoDB.getAllContacts(); 
     startManagingCursor(c); 

     //Create an array to specify which fields want to display 
     String[] from = new String[] {"name"}; 

     //Create an array of the display item want to bind our data to 
     int[] to = new int[] {R.id.fName}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     nameSpinner.setAdapter(adapter); 

     nameSpinner = (Spinner) findViewById(R.id.nameSpinner); 

哦,是的,在我輸入代碼(上面的那個)之前,我可以打開應用程序。但是在輸入代碼後,我無法打開應用程序。我不確定這是否與代碼有關。

下面是將對DBAdapter類:

public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "name"; 
    public static final String KEY_DATE = "date"; 
    public static final String KEY_TYPE = "type"; 
    public static final String KEY_LIKES = "likes"; 
    public static final String KEY_DISLIKES = "dislikes"; 

    private static final String TAG = "InfoDBAdapter"; 

    private static final String DATABASE_NAME = "friendsDB"; 
    private static final String DATABASE_TABLE = "friends_info"; 
    private static final int DATABASE_VERSION = 2; 

    private static final String DATABASE_CREATE = "create table friends_info(name_id integer primary key autoincrement, " 
      + "name text not null, date text not null, type text not null, likes text not null, dislikes text not null);"; 

    private final Context context; 

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public InfoDBAdapter(Context ctx) 
    { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      try 
      { 
       db.execSQL(DATABASE_CREATE); 
      } catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 
     }// end onCreate() 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS friends_info"); 
      onCreate(db); 
     }// end onUpgrade() 

    }// end DatabaseHelper 

     public InfoDBAdapter open() throws SQLException 
     { 
      db = DBHelper.getWritableDatabase(); 
      return this; 
     }// end open() 

     public void close() 
     { 
      DBHelper.close(); 
     }// end close() 

     public long insertContact(String name, String date, String type, String likes, String dislikes) 
     { 
      ContentValues initialValues = new ContentValues(); 
      initialValues.put(KEY_NAME, name); 
      initialValues.put(KEY_DATE, date); 
      initialValues.put(KEY_TYPE, type); 
      initialValues.put(KEY_LIKES, likes); 
      initialValues.put(KEY_DISLIKES, dislikes); 
      return db.insert(DATABASE_TABLE, null, initialValues); 
     }// end insertContact() 

     public boolean deleteContact(long rowId) 
     { 
      return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
     }// end deleteContact() 

     public Cursor getAllContacts() 
     { 
      return db.query(DATABASE_TABLE, new String[] 
        { KEY_ROWID, KEY_NAME, KEY_DATE, KEY_TYPE, KEY_LIKES, KEY_DISLIKES }, null, null, null, null, null); 
     }// end getAllContacts() 

     public Cursor getContact(long rowId) throws SQLException 
     { 
      Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { 
        KEY_ROWID, KEY_NAME, KEY_DATE, KEY_TYPE, KEY_LIKES, KEY_DISLIKES }, KEY_ROWID + "=" + rowId, 
        null, null, null, null, null); 
      if (mCursor != null) 
      { 
       mCursor.moveToFirst(); 
      } 
      return mCursor; 
     }// end getContact() 

     public boolean updateContact(long rowId, String name, String date, String type, String likes, String dislikes) 
     { 
      ContentValues args = new ContentValues(); 
      args.put(KEY_NAME, name); 
      args.put(KEY_DATE, date); 
      args.put(KEY_TYPE, type); 
      args.put(KEY_LIKES, likes); 
      args.put(KEY_DISLIKES, dislikes); 
      return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
     }// end updateContact() 

我感謝提供任何幫助。哦,如果有人知道其他方式從數據庫中檢索數據並放入微調,我將不勝感激的幫助。
感謝=)

+0

提供完整的堆棧跟蹤,這將精確確定問題所在。 – hatcyl 2012-08-06 01:56:38

+0

嗨,我剛剛編輯了我的問題。我提供了完整的堆棧跟蹤 – Preeyah 2012-08-06 02:00:21

+0

這段代碼導致了這個問題:'Cursor c = infoDB.getAllContacts();'你能發佈更完整的課程代碼嗎?如何申報'infoDB'? – hatcyl 2012-08-06 02:15:05

回答

0

您似乎忘記打開你的DataBase操作和您的db referencenull和投擲NullPointerException。嘗試調用下面的線 -

infoDB = new InfoDBAdapter(mContext); 
infoDB.open(); 
Cursor c = infoDB.getAllContacts(); 
0

InfoDb似乎null。你如何初始化它?

您需要open()數據庫才能使用它。

相關問題