2014-02-28 107 views
1

我在創建我的第一個android應用程序時在我的logcat上出現此錯誤。 02-28 11:07:49.547: W/dalvikvm(16532): threadid=1: thread exiting with uncaught exception (group=0x40015560)我真的失去了無法找到錯誤的地方。這是我的活動。Android錯誤:線程退出與未捕獲的異常(組= 0x40015560)

public class Database extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


      try { 
     String destPath = "/data/data/" + getPackageName() 
       + "/databases/grammer"; 
     File f = new File(destPath); 
     if (!f.exists()) { 
      CopyDB(getBaseContext().getAssets().open("grammer"), 
        new FileOutputStream(destPath)); 
      Toast.makeText(Database.this, "File exists", Toast.LENGTH_SHORT) 
      .show(); 
     } 
    } 

    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     Toast.makeText(Database.this, "Error File", Toast.LENGTH_SHORT) 
       .show(); 
    } 
    catch (IOException e1) { 
     e1.printStackTrace(); 
     Toast.makeText(Database.this, "Error IO", Toast.LENGTH_SHORT) 
       .show(); 
    } 

     DatabaseHandler db = new DatabaseHandler(this); 

     Cursor cursor = db.getAllQuestions(); 
     if (cursor.moveToFirst()) 
     { 
      do { 
       DisplayRecord(cursor);  
      } 
      while(cursor.moveToNext()); 
     } 

     db.close(); 
    } 

     public void CopyDB(InputStream inputstream, OutputStream outputstream)   
       throws IOException { 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = inputstream.read(buffer))>0){ 
       outputstream.write(buffer, 0, length); 
      } 
      inputstream.close(); 
      outputstream.close(); 
     } 

     public void DisplayRecord(Cursor cursor){ 
      Toast.makeText(this, 
        "id:" + cursor.getString(0) + "\n" + 
        "Title:" + cursor.getString(8) + "\n" + 
        "Question:" + cursor.getString(1) + "\n" + 
        "Answer1:" + cursor.getString(2) + "\n" + 
        "Answer2:" + cursor.getString(3) + "\n" + 
        "Answer3:" + cursor.getString(4) + "\n" + 
        "Answer4:" + cursor.getString(5) + "\n" + 
        "Answer:" + cursor.getString(6) + "\n" + 
        "Answer Text:" + cursor.getString(7), 
        Toast.LENGTH_SHORT).show(); 
     }  
    } 

這是數據庫處理程序類: -

public class DatabaseHandler extends SQLiteOpenHelper { 

    // All Static variables 
    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "grammer"; 

    // Contacts table name 
    private static final String TABLE_QUESTIONS = "questions"; 

    // Contacts Table Columns names 
    private static final String KEY_ID = "id"; 
    private static final String KEY_NAME = "questions"; 
    private static final String KEY_TITLE = "question_title"; 
    public static final String KEY_ANSWER1 = "answer1"; 
    public static final String KEY_ANSWER2 = "answer2"; 
    public static final String KEY_ANSWER3 = "answer3"; 
    public static final String KEY_ANSWER4 = "answer4"; 
    public static final String KEY_ANSWER = "answer"; 
    public static final String KEY_ANSWER_TEXT = "answer_text"; 


    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // Creating Tables 
    // will not need. if needed will have to modify adding the question title and answer text fields 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_TABLE = "CREATE TABLE " + TABLE_QUESTIONS + "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
       + KEY_ANSWER1 + " TEXT," + KEY_ANSWER2 + " TEXT," + KEY_ANSWER3 + " TEXT," 
       + KEY_ANSWER4 + " TEXT," + KEY_ANSWER + " TEXT," + KEY_TITLE + " TEXT," + KEY_ANSWER_TEXT + " TEXT," +")"; 

     db.execSQL(CREATE_TABLE); 
    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUESTIONS); 

     // Create tables again 
     onCreate(db); 
    } 

    /** 
    * All CRUD(Create, Read, Update, Delete) Operations 
    * @return 
    */ 

    // Adding new contact 
    long addQuestion(String Question, String Answer1, String Answer2, String Answer3, String Answer4, String Answer, String Answer_Text, String Question_Title) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put(KEY_NAME, Question); // question Name 
     values.put(KEY_ANSWER1, Answer1); // answer 
     values.put(KEY_ANSWER2, Answer2); // answer 
     values.put(KEY_ANSWER3, Answer3); // answer 
     values.put(KEY_ANSWER4, Answer4); // answer 
     values.put(KEY_ANSWER, Answer); // answer 
     values.put(KEY_ANSWER_TEXT, Answer_Text); 
     values.put(KEY_TITLE, Question_Title);   
    } 

    addtodb getQuestion(int id) { 
      SQLiteDatabase db = this.getReadableDatabase(); 

      Cursor cursor = db.query(TABLE_QUESTIONS, new String[] { KEY_ID, 
        KEY_NAME, KEY_ANSWER1, KEY_ANSWER2, KEY_ANSWER3, KEY_ANSWER4, KEY_ANSWER, KEY_ANSWER_TEXT, KEY_TITLE }, KEY_ID + "=?", 
        new String[] { String.valueOf(id) }, null, null, null, null); 
      if (cursor != null) 
       cursor.moveToFirst(); 

      addtodb question = new addtodb(Integer.parseInt(cursor.getString(0)), 
        cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getString(7), cursor.getString(8)); 

      return question; 
     } 

    public Cursor getAllQuestions() { 
      List<addtodb> QuestionList = new ArrayList<addtodb>(); 
      // Select All Query 
      String selectQuery = "SELECT * FROM " + TABLE_QUESTIONS; 

      SQLiteDatabase db = this.getWritableDatabase(); 
      Cursor cursor = db.rawQuery(selectQuery, null); 

      // looping through all rows and adding to list 
      if (cursor.moveToFirst()) { 
       do { 
        addtodb question = new addtodb(); 
        question.setID(Integer.parseInt(cursor.getString(0))); 
        question.setName(cursor.getString(1)); 
        question.setAnswer1(cursor.getString(2)); 
        question.setAnswer2(cursor.getString(3)); 
        question.setAnswer3(cursor.getString(4)); 
        question.setAnswer4(cursor.getString(5)); 
        question.setAnswer(cursor.getString(6)); 
        question.setAnswerText(cursor.getString(7)); 
        question.setTitle(cursor.getString(8)); 
        // Adding contact to list 
        QuestionList.add(question); 
       } while (cursor.moveToNext()); 
      } 
      //System.out.print("Hello"); 

      // return contact list 
     return cursor; 
     //return QuestionList; to get the questions as a list  
     } 

     // Updating single contact 
     public int updateQuestion(addtodb question) { 
      SQLiteDatabase db = this.getWritableDatabase(); 

      ContentValues values = new ContentValues(); 
      values.put(KEY_NAME, question.getName()); 
      values.put(KEY_ANSWER, question.getAnswer1()); 
      values.put(KEY_ANSWER, question.getAnswer2()); 
      values.put(KEY_ANSWER, question.getAnswer3()); 
      values.put(KEY_ANSWER, question.getAnswer4()); 
      values.put(KEY_ANSWER, question.getAnswer()); 
      values.put(KEY_ANSWER_TEXT, question.getAnswerText()); 
      values.put(KEY_TITLE, question.getTitle()); 

      // updating row 
      return db.update(TABLE_QUESTIONS, values, KEY_ID + " = ?", 
        new String[] { String.valueOf(question.getID()) }); 
     } 

     // Deleting single contact 
     public void deleteContact(addtodb question) { 
      SQLiteDatabase db = this.getWritableDatabase(); 
      db.delete(TABLE_QUESTIONS, KEY_ID + " = ?", 
        new String[] { String.valueOf(question.getID()) }); 
      db.close(); 
     } 

     // Getting contacts Count 
     public int getContactsCount() { 
      String countQuery = "SELECT * FROM " + TABLE_QUESTIONS; 
      SQLiteDatabase db = this.getReadableDatabase(); 
      Cursor cursor = db.rawQuery(countQuery, null); 
      cursor.close(); 

      // return count 
      return cursor.getCount(); 
     }    
} 

我在尋找的是什麼問題真的很無奈。將生成代碼中的問題,甚至可能異常

+2

發佈完整的堆棧跟蹤。 – Raghunandan

回答

2

第一個正確您的Create Table Query與此

String CREATE_TABLE = "CREATE TABLE " + TABLE_QUESTIONS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_NAME + " TEXT," 
      + KEY_ANSWER1 + " TEXT, " + KEY_ANSWER2 + " TEXT, " + KEY_ANSWER3 + " TEXT, " 
      + KEY_ANSWER4 + " TEXT, " + KEY_ANSWER + " TEXT, " + KEY_TITLE + " TEXT, " + KEY_ANSWER_TEXT + " TEXT" +")"; 
3

的一個問題是在這裏:

+ KEY_TITLE + " TEXT," + KEY_ANSWER_TEXT + " TEXT," +")"; 
               ^----- remove this , 

你不應該有之前「)」分號,否則你的表將不會創建

相關問題