2014-01-27 112 views
0

我正在尝试创建一个简单的联系人列表应用程序,当我按下按钮创建联系人时,它显示了一个表单,其中我必须添加联系人的人名以这种形式加入细节后,然后我必须按保存按钮,这些字段保存到我的DATABSE,但是当我按保存按钮我遇到的java.lang.RuntimeException:传递结果失败ResultInfo数据库未打开

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { (has extras) }} 
to activity {com.webpreneur_contactlist/com.webpreneur_contactlist.WebpreneurActivity}: 
java.lang.IllegalStateException: database not open 

这里的错误是我的代码:

 public class WebpreneurActivity extends ListActivity { 

     private static final int CONTACT_CREATE = 0; 
     private static final int CONTACT_EDIT = 1; 

     //select the second one, Android view menu 
     private static final int INSERT_ID = Menu.FIRST; 
     private static final int DELETE_ID = Menu.FIRST + 1; 

     private DBHandler dbHelper; 
     private Cursor c; 
     ImageButton imageButton; 
    long rowid; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      Log.d("database1" ,"0"); 
      Log.d("Your Location4", "ok4:"); 
      super.onCreate(savedInstanceState); 
      Log.d("database1" ,"1"); 
      setContentView(R.layout.activity_webpreneur); 
      Log.d("database1" ,"2"); 
      dbHelper = new DBHandler(this); 
      Log.d("database1" ,"3"); 
      dbHelper.open(); 
      //addListenerOnButton(); 
     //dbHelper.addContact(); 
     dbHelper.close(); 
     imageButton = (ImageButton) findViewById(R.id.imageButton1); 
     Log.d("database1" ,"button"); 
     imageButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Log.d("database1" ,"b4"); 
       Intent i = new Intent(getApplicationContext(),  ContactEdit.class); 
       startActivityForResult(i, CONTACT_CREATE); 

       Log.d("database1" ,"button3"); 
       //fillData(); 
      } 

     }); 

    } 


    @SuppressWarnings("deprecation") 
    public void fillData() { 
     Log.d("Your Location4", "ok6:"); 
     c = dbHelper.fetchAllRows(); 
     Log.d("Your Location4", "ok8:"); 
     startManagingCursor(c); 
     Log.d("Your Location4", "ok2:"); 
     ListAdapter adapter = new SimpleCursorAdapter(this, 
       R.layout.contact_row, c, new String[] { DBHandler.Key_Name, 
         DBHandler.Key_Phone }, new int[] { R.id.name, 
         R.id.phonenumber }); 
     setListAdapter(adapter); 
    } 





     /*private void createContact() { 
      Intent i = new Intent(this, ContactEdit.class); 
      startActivityForResult(i, CONTACT_CREATE); 
     }*/ 
     protected void onListItemClick(ListView l, View v, int position, long id) { 
      super.onListItemClick(l, v, position, id); 

      Intent i = new Intent(this, ContactEdit.class); 
      i.putExtra(DBHandler.Key_ID, c.getLong(c.getColumnIndex(DBHandler.Key_ID))); 
      i.putExtra(DBHandler.Key_Name, c.getString(c.getColumnIndex(DBHandler.Key_Name))); 
      i.putExtra(DBHandler.Key_Address, c.getString(c.getColumnIndex(DBHandler.Key_Address))); 
      i.putExtra(DBHandler.Key_Phone, c.getString(c.getColumnIndex(DBHandler.Key_Phone))); 
      i.putExtra(DBHandler.Key_Website, c.getString(c.getColumnIndex(DBHandler.Key_Home))); 
      startActivityForResult(i, CONTACT_EDIT); 
    } 
     protected void onActivityResult(int requestCode, int resultCode, 
       Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 

      if (resultCode == RESULT_OK) { 
       String name = data.getStringExtra(DBHandler.Key_Name); 
       String address = data.getStringExtra(DBHandler.Key_Address); 
       String mobile = data.getStringExtra(DBHandler.Key_Phone); 
       String home = data.getStringExtra(DBHandler.Key_Home); 
       switch (requestCode) { 
       case CONTACT_CREATE: 
        Log.d("Your Location4", "jj:"); 
        dbHelper.createRow(name, address, mobile, home); 
        Log.d("Your Location4", "ok90:"); 
        fillData(); 
        break; 
       case CONTACT_EDIT: 

        String id = data.getStringExtra(DBHandler.Key_ID); 


        long rowId=Long.parseLong(id); 

        if (rowId != (Long)null){ 
         dbHelper.updateRow(rowId, name, address, mobile, home); 
        } 
        fillData(); 
        break; 
       } 
      } 
     } 
    } 
    ///////////////////////////////////////////////// 

    public class ContactEdit extends Activity { 

     protected EditText nameText; 
     private EditText addressText; 
     private EditText mobileText; 
     private EditText homeText; 
     public long rowId; 
      Button submitButton; 
      @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      Log.d("database1" ,"button4"); 
      setContentView(R.layout.contact_edit); 
      Log.d("database1" ,"button5"); 
      nameText = (EditText) findViewById(R.id.textName); 
      addressText = (EditText) findViewById(R.id.textAddress); 
      mobileText = (EditText) findViewById(R.id.textMobile); 
      homeText = (EditText) findViewById(R.id.textHome); 
      Button submitButton = (Button) findViewById(R.id.BtnSave); 
      //long rowId = (Long) null; 
      Intent extras = getIntent(); 
      Log.d("database1" ,"button5"); 

      if (extras != null){ 
       //get all the values for the corresponding keys 
       String name = extras.getStringExtra(DBHandler.Key_Name); 
       String address = extras.getStringExtra(DBHandler.Key_Address); 
       String mobile = extras.getStringExtra(DBHandler.Key_Phone); 
       String home = extras.getStringExtra(DBHandler.Key_Home); 
      // String id = extras.getStringExtra(DBHandler.Key_ID); 
       //Log.d("database1" ,"button6"); 

      // rowId=Long.parseLong(id.trim()); 
       // if (rowId != (Long)null) 
       // { 
        // Log.d("foract","gact"); 
       //} 
       //else { 
        // Log.d("foract","gactttt"); 
       //} 

       if (name !=null){ 
        nameText.setText(name); 
       } 
       if (address != null){ 
        addressText.setText(address); 
       } 
       if (mobile != null){ 
        mobileText.setText(mobile); 
       } 
       if (home != null){ 
        homeText.setText(home); 
       } 

      } 


      submitButton.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v){ 
      //Intent bundle = new Bundle(); 
      Intent intent=new Intent(); 

      intent.putExtra(DBHandler.Key_Name, nameText.getText().toString()); 
      intent.putExtra(DBHandler.Key_Address, addressText.getText().toString()); 
      intent.putExtra(DBHandler.Key_Phone, mobileText.getText().toString()); 
      intent.putExtra(DBHandler.Key_Home, homeText.getText().toString()); 

       // intent.putExtra(DBHandler.Key_ID, rowId); 
     // Log.d(DBHandler.Key_ID, rowId); 
      setResult(RESULT_OK,intent); 
      Log.e("what","result set"); 
      finish(); 
     } 

     public void onClick(DialogInterface arg0, int arg1) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    }} 
    ////////////////////////////////// 
    DBHANDLER CLASS/////////////////// 

    public class DBHandler extends SQLiteOpenHelper{ 

     private static final int DB_Version = 1; 

     private static final String DB_Name = "Places"; 

     protected static final String Places_Table = "Places"; 

     String name, Address, Website,ID; 
     //WebpreneurActivity Contact; 
    public static final String Key_ID = "ID"; 
    public static final String Key_Name = "Name"; 
    public static final String Key_Phone = "Phone"; 
    public static final String Key_Address = "Address"; 
    public static final String Key_Website = "Website"; 
    public static final String Key_Home = "HOME"; 
    public static final String PROJECTION[] = { 
     Key_ID, 
     Key_Name, 
     Key_Address, 
     Key_Phone, 
     Key_Home 
    }; 

     String CREATE_PLACES_TABLE = "create table if not exists Places_Table (id integer primary key ,"+ 
       "name VARCHAR not null, phone VARCHAR not null, address VARCAHR not null, website VARCHAR not null,Home VARCHAR not null)"; 

     Context context; 
     SQLiteDatabase db; 

     public DBHandler(Context context) { 

      super(context, DB_Name, null, DB_Version); 
      Log.d("database1" ,"4"); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      try{ 
       Log.d("DB", "DB creationnewwwww"); 
        db.execSQL("CREATE TABLE " + Places_Table + " (" + 
          Key_ID + " INT PRIMARY KEY NOT NULL,"+ 
          Key_Name + " TEXT NOT NULL," + 
          Key_Phone + " TEXT NOT NULL," + 
          Key_Address + " TEXT NOT NULL," + 
          Key_Website + " TEXT," + 
          Key_Home + " TEXT)"); 
        Log.d("DB", "DB creationnewwwwwwwwwwwwwwwwwwwwwwwwwww"); 
      } 
      catch(SQLiteException e){ 
       Log.d("DB", "DB creation excptionhhhhhhhhhhhhhhh"); 
       e.printStackTrace(); 
      } 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 

      db.execSQL("Drop Table If Exists" + Places_Table); 
      onCreate(db); 
     } 

     /* void addContact() { 
       SQLiteDatabase db = this.getWritableDatabase(); 

       ContentValues values = new ContentValues(); 
       values.put(Key_Name,Name); // Contact Name 
       values.put(KEY_COST,cost); // Contact Phone 
       values.put(Key_Address, contact.Address); //Contact phone no 

       // Inserting Row 
       db.insert(Places_Table, null, values); 
       db.close(); // Closing database connection 
      }*/ 

     public DBHandler open() 
     {Log.d("DB", "DB creation 9"); 
     db = this.getWritableDatabase(); 
      //onCreate(db); 
     Log.d("DB", "DB creation 9"); 
     return this; 
     } 
     public void close() 
     { 
      db.close(); 

     } 

     //Adding Places 
     void addPlaces(int id, String name,String phone, String address,String url){ 

      Log.d("DB", "DB creation 1"); 
      //SinglePlaceActivity single = new SinglePlaceActivity(); Log.d("DB", "DB creation 2"); 
      ContentValues contentValues = new ContentValues(); 
      Log.d("DB", "DB creation 3"); 
      contentValues.put(Key_ID, id); 
      Log.d("DB", "DB creation 4"); 
      contentValues.put(Key_Name, name); 
      contentValues.put(Key_Phone, phone); 
      contentValues.put(Key_Address, address); 
      contentValues.put(Key_Website, url); 
      Log.d("DB", "DB creation 4"); 
      db.insert(Places_Table, null, contentValues); 
      Log.d("DB", "DB creation 5555"); 
      //db.close(); 
     } 

     public String getdata() { 
      // TODO Auto-generated method stub 
      String [] columns =new String[]{Key_ID ,Key_Name,Key_Address,Key_Website}; 
      Cursor c =db.query(DB_Name, columns, null, null, null, null, null); 
      String Result=""; 
      int iRow=c.getColumnIndex(Key_ID); 
      int iName=c.getColumnIndex(Key_Name); 
      int iAddress=c.getColumnIndex(Key_Address); 
      int iWebsite=c.getColumnIndex(Key_Website); 
      for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ 
       Result=Result+c.getString(iRow)+" "+c.getString(iName)+ " "+c.getString(iAddress)+ " "+c.getString(iWebsite)+ "\n"; 
      } 

      return Result; 
     } 


     public void createRow(String name, String address, String Phone, String home) 
     { 
      ContentValues initialValues = new ContentValues(); 
      initialValues.put(Key_Name, name); 
      initialValues.put(Key_Address, address); 
      initialValues.put(Key_Phone, Phone); 
      initialValues.put(Key_Home, home); 
        //pass the initialValues to the database to insert the row 
      Log.d(Key_Home, home); 
      db.insert(Places_Table, null, initialValues); 
      Log.d("Your Location4", "okna:"); 
     } 

      public void deleteRow(long rowId){ 
      db.delete(Places_Table, Key_ID+"="+rowId,null); 
     } 

      public boolean updateRow (long rowId, String name, String address, String Phone, String home){ 
      ContentValues args = new ContentValues(); 
      args.put(Key_Name, name); 
      args.put(Key_Address, address); 
      args.put(Key_Phone, Phone); 
      args.put(Key_Home, home); 
      return db.update(Places_Table, args, Key_ID +"="+ rowId, null)>0; 
     } 
      public Cursor fetchRow(long rowId) throws SQLException{ 
       Cursor result = db.query(Places_Table, null, 
         Key_ID + "=" + rowId, null, null, null,null); 
       if ((result.equals(rowId)) || !result.isFirst()) { 
        throw new SQLException("No note matching ID: " + rowId); 
       } 
       return result; 
      } 

      public Cursor fetchAllRows(){ 
       Log.d("Your Location4", "ok99:"); 
       return db.query(Places_Table, PROJECTION, 
         null, null, null, null, null); 

      } 
    } 
+0

在com.webpreneur_contactlist.DBHandler.createRow(DBHandler.java:149) – Shazar

+0

android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1534) – Shazar

回答

0

只需执行以下操作。可能它会为你工作:

第一:

声明你

private static String DB_NAME="Database_Name"; 
    private final Context context; 
    private String DB_PATH=""; 
    private static int DB_VERSION=1; 
    SQLiteDatabase db; 

由于

private static SQLiteDatabase db; 

而且你的构造是这样的:

public DBHandler(Context context){ 
     super(context, DB_NAME, null,DB_VERSION); 
     this.context = context; 
     DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; 
    } 

然后打开你的访问it.as前数据的基础上:

public void open() throws SQLException{  
    //Open the database 
    String myPath = DB_PATH + DB_NAME; 
    db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
} 

和访问数据的complition后关闭它:

@Override 
public synchronized void close() { 
    if(db != null) 
     db.close(); 
    super.close(); 
} 

可能这会帮助你。

+0

可以请你告诉我什么是DB_PATH?或者它是什么数据类型? – Shazar

+0

@ user1796974 DB_PATH是一个字符串类型的变量。看看代码。我正在更新它。 –

+0

仍geting相同的错误:) – Shazar

相关问题