打开Android应用程序的问题

问题描述:

我想知道为什么我无法打开我的应用程序。另外,我试图从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

您似乎忘记打开你的DataBase操作和您的db referencenull和投掷NullPointerException。尝试调用下面的线 -

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

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

您需要open()数据库才能使用它。